{"id":500,"date":"2024-01-31T12:30:00","date_gmt":"2024-01-31T11:30:00","guid":{"rendered":"https:\/\/niwadev.com\/?p=500"},"modified":"2025-01-27T14:21:22","modified_gmt":"2025-01-27T13:21:22","slug":"tdd-in-der-praxis-wie-sie-es-konkret-anwenden-koennen","status":"publish","type":"post","link":"https:\/\/niwadev.com\/de\/blog\/tdd-in-practice-how-you-can-actually-use-it\/","title":{"rendered":"TDD in der Praxis: Wie Sie es konkret anwenden k\u00f6nnen"},"content":{"rendered":"<p>M\u00f6chten Sie die Codequalit\u00e4t Ihrer Softwareentwicklungsprojekte verbessern? Testgetriebene Entwicklung (TDD) ist ein bew\u00e4hrter Ansatz, mit dem Sie dieses Ziel erreichen k\u00f6nnen. In dieser Schritt-f\u00fcr-Schritt-Anleitung f\u00fchre ich Sie durch den Prozess der Implementierung von TDD in Ihren Projekten, von der Erstellung grundlegender Tests bis zum kontinuierlichen Code-Refactoring. Tauchen wir ein!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Warum mache ich TDD?<\/h2>\n\n\n\n<p>Wie bereits in meinem <a href=\"https:\/\/niwadev.com\/de\/blog\/die-vorteile-von-test-getriebener-entwicklung-tdd-in-der-software-entwicklung\/\" target=\"_blank\" rel=\"noopener\" title=\"Die Vorteile der testgetriebenen Entwicklung (TDD) in der Softwareentwicklung\">letzten Artikel erw\u00e4hnt<\/a>, hilft mir TDD, die Qualit\u00e4t des Codes sicherzustellen und zu gew\u00e4hrleisten, dass alle Anforderungen einer Aufgabe erf\u00fcllt werden. Es hat lange gedauert, bis ich wirklich verstanden habe, wie TDD funktioniert, weil ich kein gutes Beispiel daf\u00fcr hatte, wie der Prozess wirklich funktioniert. Deshalb m\u00f6chte ich es heute mit Ihnen teilen.<\/p>\n\n\n\n<p>Meine Reise mit TDD begann mit dem folgenden Video, in dem Robert C. Martin den Prozess demonstrierte:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Clean Code - Uncle Bob \/ Lesson 4\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/58jGpV2Cg50?list=PLmmYSbUCWJ4x1GO839azG_BBw8rkh-zOj\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Robert C. Martin zeigt, wie TDD funktioniert (ab 43:48 min)<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Grundlegende Tests erstellen<\/h2>\n\n\n\n<p>Da mir das Beispiel von Uncle Bob gef\u00e4llt, um TDD bei der Entwicklung eines Stacks zu zeigen, werde ich dies auch als Beispiel nehmen. Meine Implementierung wird in C# sein und xUnit als Test-Framework verwenden. Wenn Sie mit xUnit nicht vertraut sind, schauen Sie sich zun\u00e4chst die <a href=\"https:\/\/xunit.net\/#documentation\" target=\"_blank\" rel=\"noopener nofollow\" title=\"xUnit Dokumentation\">Dokumentation<\/a> an. Zun\u00e4chst m\u00fcssen Sie sicherstellen, dass Sie eine Testumgebung haben. Das hei\u00dft, Sie haben ein Anwendungsprojekt und ein Testprojekt, das eine Referenz auf das Anwendungsprojekt hat. Wenn der Test ausgef\u00fchrt werden kann, ist die Testumgebung funktionsf\u00e4hig. Um eine solche Umgebung zu schaffen, erstelle ich eine neue Projektmappe mit einer Konsolenanwendung und verweise das Konsolenanwendungsprojekt auf das Unit-Test-Projekt.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"390\" height=\"503\" src=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-1-setup-project.png\" alt=\"JetBrains Rider Project Explorer zeigt das Konsolenanwendungsprojekt und das Unit-Test-Projekt, das eine Referenz enth\u00e4lt.\" class=\"wp-image-502\" srcset=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-1-setup-project.png 390w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-1-setup-project-233x300.png 233w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-1-setup-project-9x12.png 9w\" sizes=\"(max-width: 390px) 100vw, 390px\" \/><figcaption class=\"wp-element-caption\">Verbinden Sie das Unit-Test-Projekt mit der Konsolenanwendung<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Die C#-Klasse StackTest enth\u00e4lt einen einfachen Test, der nichts tut und nur dazu dient, zu \u00fcberpr\u00fcfen, ob der Test-Runner ausgef\u00fchrt werden kann.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace TddDemo.UnitTests;\n\npublic class StackTest\n{\n    &#91;Fact]\n    public void Nothing()\n    {\n    }\n}<\/code><\/pre>\n\n\n\n<p>Schlie\u00dflich m\u00fcssen Sie nur noch die Tests ausf\u00fchren und sehen, ob sie funktionieren oder ob es Probleme gibt.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"826\" height=\"245\" src=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-3-first-run-successful.png\" alt=\"JetBrains Rider Test Runner zeigt einen einzelnen Unit-Test namens &quot;Nothing&quot; an, der erfolgreich ausgef\u00fchrt wurde.\" class=\"wp-image-503\" srcset=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-3-first-run-successful.png 826w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-3-first-run-successful-300x89.png 300w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-3-first-run-successful-768x228.png 768w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-3-first-run-successful-18x5.png 18w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><figcaption class=\"wp-element-caption\">Pr\u00fcfen Sie im Test-Runner Ihrer IDE, ob der Test erfolgreich ausgef\u00fchrt wurde<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Der zweite Schritt bei der Implementierung von TDD besteht darin, einen grundlegenden Test zu erstellen, der eine bestimmte Funktionalit\u00e4t Ihres Programms \u00fcberpr\u00fcft. Dieser Test dient als Vorlage f\u00fcr den Code, den Sie schreiben werden. Wenn Sie mit einem Test beginnen, haben Sie eine klare Vorstellung davon, was Ihr Code leisten soll. Aber wo soll man anfangen? Hierf\u00fcr gibt es eine einfache Regel:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Sie schreiben den Test, der Sie dazu zwingt, den Code zu schreiben, von dem Sie bereits wissen, dass Sie ihn schreiben wollen.<\/p>\n<cite>Robert C. Martin alias &#8220;Uncle Bob&#8221;<\/cite><\/blockquote>\n\n\n\n<p>Wir m\u00fcssen also zun\u00e4chst mit etwas so Einfachem wie dem Schreiben eines Tests beginnen, der einen Stack erzeugen soll.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    &#91;Fact]\n    public void CreateStack()\n    {\n        var myStack = new MyStack();\n    }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Implementierung des Minimalcodes<\/h2>\n\n\n\n<p>Aber jetzt gibt die IDE einen Fehler aus, der besagt, dass sie das Symbol \"MyStack\" nicht aufl\u00f6sen konnte. Hier beginnt der Zyklus. Erinnern Sie sich an den <a href=\"https:\/\/niwadev.com\/de\/blog\/die-vorteile-von-test-getriebener-entwicklung-tdd-in-der-software-entwicklung\/\" target=\"_blank\" rel=\"noopener\" title=\"Die Vorteile der testgetriebenen Entwicklung (TDD) in der Softwareentwicklung\">letzten Artikel erw\u00e4hnt<\/a> indem ich \u00fcber TDD mit den drei Phasen \"rot\", \"gr\u00fcn\" und \"refactor\" geschrieben habe. Jetzt verstehen Sie vielleicht, warum die erste Phase \"rot\" genannt wird: Wir schreiben Code, bis wir einen Fehler finden. Das ist der Moment, in dem wir ihn beheben m\u00fcssen.<\/p>\n\n\n\n<p>Ziel ist es, einen m\u00f6glichst einfachen Code zu schreiben, der die Anforderungen des Tests erf\u00fcllt. Indem Sie sich darauf konzentrieren, den Test zu bestehen, stellen Sie sicher, dass Ihr Code von Anfang an korrekt funktioniert. In diesem Fall ist es einfach, eine neue Klasse namens \"MyStack\" im Anwendungsprojekt zu erstellen.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"767\" height=\"213\" src=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-4-fix-first-error.png\" alt=\"JetBrains Rider mit einer neuen Klasse namens &quot;MyStack&quot; im Projekt &quot;TddDemo&quot;, das in diesem Fall unsere Anwendung ist.\" class=\"wp-image-504\" srcset=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-4-fix-first-error.png 767w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-4-fix-first-error-300x83.png 300w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-4-fix-first-error-18x5.png 18w\" sizes=\"(max-width: 767px) 100vw, 767px\" \/><figcaption class=\"wp-element-caption\">Die Erstellung einer Klasse l\u00f6st das Problem<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Wenn Sie nun zu Ihrem Testfall zur\u00fcckwechseln, sehen Sie, dass der Fehler verschwunden ist. Wenn Sie den Test jetzt ausf\u00fchren, ist er gr\u00fcn. Unsere \"gr\u00fcne\" Phase ist also auch abgeschlossen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kontinuierliches Code-Refactoring<\/h2>\n\n\n\n<p>Nach bestandenem Test ist der n\u00e4chste Schritt das kontinuierliche Refactoring des Codes. Dabei geht es darum, die Qualit\u00e4t Ihres Codes zu verbessern, ohne dessen Funktionalit\u00e4t zu beeintr\u00e4chtigen. Durch regelm\u00e4\u00dfiges Refactoring Ihres Codes k\u00f6nnen Sie alle technischen Schulden beseitigen und sicherstellen, dass Ihre Codebasis sauber und wartbar bleibt. Mir pers\u00f6nlich gef\u00e4llt der Name \"MyStack\" nicht, also werde ich die Klasse in \"Stack\" umbenennen. Nachdem Sie die Klasse umbenannt haben, f\u00fchren Sie den Test erneut durch, um zu sehen, ob er immer noch erfolgreich ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Den Prozess fortsetzen<\/h2>\n\n\n\n<p>Das vorliegende Beispiel war nur der Anfang des TDD-Prozesses und daher etwas simpel. Au\u00dferdem \u00fcberpr\u00fcft der Test nichts. Um Ihnen einen besseren Einblick zu geben, f\u00fcge ich dem Code weitere Logik hinzu, um Ihnen zu zeigen, wie Sie den Prozess fortsetzen k\u00f6nnen. Aber lassen Sie uns zuerst unseren ersten Test abschlie\u00dfen. In diesem Fall ist es sinnvoll, zu pr\u00fcfen, ob der neu erstellte Stack leer ist. F\u00fcgen wir also diese Pr\u00fcfung in den Test ein.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    &#91;Fact]\n    public void CreateStack()\n    {\n        var myStack = new Stack();\n        Assert.True(myStack.isEmpty());\n    }<\/code><\/pre>\n\n\n\n<p>Die IDE zeigt wieder einen Fehler an. Denken Sie daran: Jetzt sind wir wieder in der \"roten\" Phase - korrigieren Sie den Code. Die L\u00f6sung besteht in diesem Fall darin, die Methode hinzuzuf\u00fcgen. Ich lasse die IDE hier die Hauptarbeit f\u00fcr mich erledigen \ud83d\ude09.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"653\" height=\"190\" src=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-5-create-method.png\" alt=\"Verwendung des JetBrains Rider Suggestion Tools, um der Klasse &quot;Stack&quot; die fehlende Methode &quot;isEmpty&quot; hinzuzuf\u00fcgen.\" class=\"wp-image-506\" srcset=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-5-create-method.png 653w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-5-create-method-300x87.png 300w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-5-create-method-18x5.png 18w\" sizes=\"(max-width: 653px) 100vw, 653px\" \/><figcaption class=\"wp-element-caption\">Hinzuf\u00fcgen der Methode mit Hilfe der IDE-Tools<\/figcaption><\/figure>\n<\/div>\n\n\n<p>F\u00fchren Sie den Test jetzt aus, und er wird rot sein. Dieser Schritt ist wichtig, um zu sehen, ob unser Test wirklich funktioniert oder nur immer gr\u00fcn wird.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"967\" height=\"278\" src=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-6-method-not-implemented.png\" alt=\"JetBrains Rider Unit Test Explorer zeigt einen Fehler im Test an.\" class=\"wp-image-507\" srcset=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-6-method-not-implemented.png 967w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-6-method-not-implemented-300x86.png 300w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-6-method-not-implemented-768x221.png 768w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-6-method-not-implemented-18x5.png 18w\" sizes=\"(max-width: 967px) 100vw, 967px\" \/><figcaption class=\"wp-element-caption\">Die Ausnahme \"Methode nicht implementiert\" wurde erwartet - jetzt wissen wir, dass unser Test funktioniert<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Um das Problem zu beheben, m\u00fcssen Sie einen m\u00f6glichst einfachen Code schreiben, um den Test zu erf\u00fcllen. In diesem Fall wird einfach true zur\u00fcckgegeben, wenn die Methode aufgerufen wird. Und der Test l\u00e4uft wie geschmiert.<\/p>\n\n\n\n<p>\"Aber warum sollte ich das so machen?\", werden Sie sich vielleicht fragen. Mit dieser Methode sehen Sie, dass Ihr Test erfolgreich und nicht erfolgreich ist, und Sie brauchen fast keine Zeit, um Ihren Test zu testen.<\/p>\n\n\n\n<p>Jetzt ist es Zeit f\u00fcr ein Refactoring. Zun\u00e4chst w\u00fcrde ich die Methode umbenennen, um den Namenskonventionen zu entsprechen (von \"isEmpty\" in \"IsEmpty\"). Testen Sie erneut und benennen Sie anschlie\u00dfend die Testmethode um (von \"CreateStack\" in \"NewStackIsEmpty\").<\/p>\n\n\n\n<p>Um den Prozess fortzusetzen, erstelle ich einen Test, um etwas in den Stack zu schieben. Ich bin so weit gekommen, bevor die IDE einen Fehler anzeigt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    &#91;Fact]\n    public void PushInStack()\n    {\n        var myStack = new Stack();\n        myStack.Push(5);\n    }<\/code><\/pre>\n\n\n\n<p>Auch hier ist die Methode nicht vorhanden. F\u00fcgen wir sie also hinzu und f\u00fchren wir den Test durch, um zu sehen, was los ist.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"972\" height=\"457\" src=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-7-push-in-stack-test.png\" alt=\"JetBrains Rider: Code der Push-Implementierung und rotes Testergebnis, das eine Ausnahme &quot;nicht implementierte Methode&quot; zeigt.\" class=\"wp-image-508\" srcset=\"https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-7-push-in-stack-test.png 972w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-7-push-in-stack-test-300x141.png 300w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-7-push-in-stack-test-768x361.png 768w, https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-7-push-in-stack-test-18x8.png 18w\" sizes=\"(max-width: 972px) 100vw, 972px\" \/><figcaption class=\"wp-element-caption\">Die Ausnahme wurde nicht erwartet, daher wird ein Fehler angezeigt<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Entfernen Sie die NotImplementedException und der Test wird gr\u00fcn - Problem gel\u00f6st(?). Beim Refactoring benenne ich den Parameter \"i\" in \"element\" um. Es funktioniert immer noch, keine \u00dcberraschung so weit. <\/p>\n\n\n\n<p>Wieder brauche ich eine Pr\u00fcfung (Assertion). Also wird angenommen, dass \"myStack.IsEmpty()\" false zur\u00fcckgibt. Und der Test wird wieder rot. Jetzt m\u00fcssen wir das Problem beheben.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Eine der Regeln der testgetriebenen Entwicklung lautet, dass Sie so wenig Gehirnzellen wie m\u00f6glich beanspruchen, denn Sie werden sie sp\u00e4ter brauchen. Machen Sie nicht zu viel zu schnell.<\/p>\n<cite>Robert C. Martin alias &#8220;Uncle Bob&#8221;<\/cite><\/blockquote>\n\n\n\n<p>Um diese Regel einzuhalten, erstellen wir in der Klasse eine Variable mit dem Namen \"isEmpty\", die mit \"false\" initialisiert wird und auf \"true\" wechselt, wenn die Methode \"Push\" aufgerufen wird.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Stack\n{\n    private bool _isEmpty = true;\n    \n    public bool IsEmpty()\n    {\n        return _isEmpty;\n    }\n\n    public void Push(int element)\n    {\n        _isEmpty = false;\n    }\n}<\/code><\/pre>\n\n\n\n<p>Beim Refactoring w\u00fcrde ich die doppelte Initialisierung von \"myStack\" entfernen, so dass der Code f\u00fcr die Testklasse wie folgt aussieht:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class StackTest\n{\n    private readonly Stack _myStack = new();\n\n    &#91;Fact]\n    public void NewStackIsEmpty()\n    {\n        Assert.True(_myStack.IsEmpty());\n    }\n\n    &#91;Fact]\n    public void PushInStack()\n    {\n        _myStack.Push(5);\n        Assert.False(_myStack.IsEmpty());\n    }\n}<\/code><\/pre>\n\n\n\n<p>Der Prozess w\u00fcrde jetzt immer so weitergehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Herausforderungen, Gr\u00fcnde und L\u00f6sungen<\/h2>\n\n\n\n<p>Auf den ersten Blick sieht es seltsam aus. Warum diese winzigen Babyschritte? Warum wird nicht zuerst der Code implementiert? Wenn Sie Ihre Logik zuerst schreiben w\u00fcrden, w\u00fcrde dies wahrscheinlich zu einem nicht testbaren Code f\u00fchren, der nicht modular ist. Das w\u00fcrde die m\u00f6gliche Testabdeckung verringern. Die kleinen Schritte sind wichtig, um sicherzustellen, dass die Tests tats\u00e4chlich funktionieren. Sonst k\u00f6nnte es passieren, dass ein Fehler auftritt, obwohl der Test gr\u00fcn ist, was zu unzuverl\u00e4ssigen Tests f\u00fchrt. Das ist ein gro\u00dfes Problem, das Sie unbedingt vermeiden wollen.<\/p>\n\n\n\n<p>Aber es gibt auch Vorteile: Die Anwendung dieser Technik reduziert die Menge an geistiger Arbeit, die Sie f\u00fcr die Erstellung von Code ben\u00f6tigen, da Sie nur Tests erf\u00fcllen. Au\u00dferdem haben Sie viele Erfolgserlebnisse. Jeder gr\u00fcne Test ist ein Erfolg f\u00fcr sich. Werden Sie nicht s\u00fcchtig \ud83d\ude09 Zudem k\u00f6nnen Sie sicher sein, dass der mit TDD erstellte Code so funktioniert, wie in den Tests definiert. Das reduziert den Stress und die Anzahl der notwendigen manuellen Tests.<\/p>\n\n\n\n<p>Je mehr Erfahrung Sie mit TDD sammeln, desto schneller werden Sie. Vielleicht entscheiden Sie sich, einige Setup-Schritte zu \u00fcberspringen, aber Sie sollten es zuerst ausprobieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TDD in unterschiedlichen Programmiersprachen<\/h2>\n\n\n\n<p>TDD ist ein unabh\u00e4ngiger Ansatz, der in fast jeder Programmiersprache angewendet werden kann. Egal ob Sie mit JavaScript, Python, Java oder einer anderen Sprache arbeiten, TDD kann effektiv implementiert werden. In diesem Artikel habe ich ein Beispiel mit C# und xUnit gezeigt.<\/p>\n\n\n<div class=\"gb-container gb-container-09dc38ee\">\n\n<p>Wenn Sie TDD in Ihren Entwicklungsprozess integrieren m\u00f6chten, aber nicht wissen, wo Sie anfangen sollen, bin ich f\u00fcr Sie da. Ich kann Sie durch den Prozess der Implementierung von TDD f\u00fchren und Ihnen helfen, eine hervorragende Codequalit\u00e4t zu erreichen.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/niwadev.com\/de\/kontakt\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kontaktieren Sie mich noch heute!<\/a><\/div>\n<\/div>\n\n<\/div>","protected":false},"excerpt":{"rendered":"<p>M\u00f6chten Sie die Codequalit\u00e4t Ihrer Softwareentwicklungsprojekte verbessern? Testgetriebene Entwicklung (TDD) ist ein bew\u00e4hrter Ansatz, mit dem Sie dieses Ziel erreichen k\u00f6nnen. In dieser Schritt-f\u00fcr-Schritt-Anleitung f\u00fchre ich Sie durch den Prozess der Implementierung von TDD in Ihren Projekten, von der Erstellung grundlegender Tests bis zum kontinuierlichen Code-Refactoring. Tauchen wir ein! <a title=\"TDD in der Praxis: Wie Sie es konkret anwenden k\u00f6nnen\" class=\"read-more\" href=\"https:\/\/niwadev.com\/de\/blog\/tdd-in-practice-how-you-can-actually-use-it\/\" aria-label=\"Mehr Informationen \u00fcber TDD in Practice: How you can actually use it\">Weiterlesen &#8230;<\/a><\/p>","protected":false},"author":2,"featured_media":511,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[37],"tags":[36,35,34],"class_list":["post-500","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development","tag-code-quality","tag-software-development","tag-test-driven-development"],"aioseo_notices":[],"uagb_featured_image_src":{"full":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image.webp",1200,400,false],"thumbnail":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image-150x150.webp",150,150,true],"medium":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image-300x100.webp",300,100,true],"medium_large":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image-768x256.webp",768,256,true],"large":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image-1024x341.webp",1024,341,true],"1536x1536":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image.webp",1200,400,false],"2048x2048":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image.webp",1200,400,false],"trp-custom-language-flag":["https:\/\/niwadev.com\/wp-content\/uploads\/2024\/01\/tdd-in-practice-article-featured-image-18x6.webp",18,6,true]},"uagb_author_info":{"display_name":"Nicolas Wazulek","author_link":"https:\/\/niwadev.com\/de\/blog\/author\/u_auth_niwa\/"},"uagb_comment_info":0,"uagb_excerpt":"Are you looking to improve the code quality of your software development projects? Test-Driven Development (TDD) is a proven approach that can help you achieve this goal. In this step-by-step guide, I will walk you through the process of implementing TDD in your projects, from creating basic tests to continuous code refactoring. Let&#8217;s dive in!&hellip;","_links":{"self":[{"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/posts\/500","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/comments?post=500"}],"version-history":[{"count":1,"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/posts\/500\/revisions"}],"predecessor-version":[{"id":954,"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/posts\/500\/revisions\/954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/media\/511"}],"wp:attachment":[{"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/media?parent=500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/categories?post=500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niwadev.com\/de\/wp-json\/wp\/v2\/tags?post=500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}