{"id":280,"date":"2024-03-13T14:30:33","date_gmt":"2024-03-13T13:30:33","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=280"},"modified":"2024-03-24T14:34:09","modified_gmt":"2024-03-24T13:34:09","slug":"when-then-konstruktionen-mit-mockito-in-junit-tests","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=280","title":{"rendered":"When\/Then-Konstruktionen mit Mockito in JUnit-Tests"},"content":{"rendered":"\n<p>JUnit ist ein beliebtes Framework f\u00fcr das Testen von Java-Anwendungen, w\u00e4hrend Mockito ein leistungsf\u00e4higes Mocking-Framework ist, das h\u00e4ufig in Verbindung mit JUnit verwendet wird. Mocking ist ein wesentliches Konzept im Unit-Testing, bei dem Objekte simuliert werden, um das Verhalten von Abh\u00e4ngigkeiten zu kontrollieren und isolierte Tests durchzuf\u00fchren. Eine der wichtigsten Funktionen von Mockito ist die M\u00f6glichkeit, komplexe When\/Then-Konstruktionen zu erstellen, um das Verhalten von Mock-Objekten in verschiedenen Szenarien zu definieren. In diesem Artikel werden wir uns mit komplexeren When\/Then-Konstruktionen in Mockito befassen und zeigen, wie sie in JUnit-Tests angewendet werden k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grundlagen von Mockito<\/h2>\n\n\n\n<p>Bevor wir uns mit komplexeren When\/Then-Konstruktionen befassen, lassen Sie uns einen kurzen \u00dcberblick \u00fcber Mockito und seine grundlegenden Konzepte geben. Mockito erm\u00f6glicht es Entwicklern, Mock-Objekte zu erstellen, die das Verhalten von echten Objekten simulieren. Diese Mock-Objekte k\u00f6nnen verwendet werden, um das Verhalten von Abh\u00e4ngigkeiten zu definieren und isolierte Tests durchzuf\u00fchren, ohne auf reale Ressourcen zugreifen zu m\u00fcssen.<\/p>\n\n\n\n<p>Die Grundlage von Mockito sind die Methoden <code>when()<\/code> und <code>then()<\/code>. Mit <code>when()<\/code> definieren wir das Verhalten eines Mock-Objekts in einer bestimmten Situation, w\u00e4hrend <code>then()<\/code> die Aktionen spezifiziert, die in Reaktion auf die definierte Situation ausgef\u00fchrt werden sollen. Diese Grundkonstruktion erm\u00f6glicht es uns, das Verhalten von Mock-Objekten flexibel zu steuern und verschiedene Testf\u00e4lle abzudecken.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einfache When\/Then-Konstruktionen<\/h2>\n\n\n\n<p>Zun\u00e4chst betrachten wir eine einfache When\/Then-Konstruktion in Mockito:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-comment\">\/\/ Erstellen eines Mock-Objekts<\/span>\nList&lt;<span class=\"hljs-built_in\">String<\/span>&gt; mockedList = Mockito.mock(List.class);\n\n<span class=\"hljs-comment\">\/\/ Definieren des Verhaltens des Mock-Objekts<\/span>\nMockito.when(mockedList.get(<span class=\"hljs-number\">0<\/span>)).thenReturn(<span class=\"hljs-string\">\"Mockito\"<\/span>);\n\n<span class=\"hljs-comment\">\/\/ Testen des definierten Verhaltens<\/span>\nassertEquals(<span class=\"hljs-string\">\"Mockito\"<\/span>, mockedList.get(<span class=\"hljs-number\">0<\/span>));<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird ein Mock-Objekt f\u00fcr die Klasse <code>List<\/code> erstellt. Mit <code>when()<\/code> wird definiert, dass beim Aufruf der Methode <code>get(0)<\/code> des Mock-Objekts der Wert &#8222;Mockito&#8220; zur\u00fcckgegeben werden soll. In der Testmethode \u00fcberpr\u00fcfen wir, ob das definierte Verhalten korrekt ist, indem wir sicherstellen, dass beim Aufruf von <code>get(0)<\/code> tats\u00e4chlich &#8222;Mockito&#8220; zur\u00fcckgegeben wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Komplexere When\/Then-Konstruktionen<\/h2>\n\n\n\n<p>Nun schauen wir uns an, wie wir komplexere When\/Then-Konstruktionen erstellen k\u00f6nnen, um auf verschiedene Eingaben unterschiedlich zu reagieren oder Ausnahmen zu werfen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-comment\">\/\/ Definieren von komplexeren Verhaltensweisen<\/span>\nMockito.when(mockedList.get(Mockito.anyInt()))\n       .thenAnswer(invocation -&gt; {\n           Integer index = invocation.getArgument(<span class=\"hljs-number\">0<\/span>);\n           <span class=\"hljs-keyword\">if<\/span> (index &lt; <span class=\"hljs-number\">0<\/span>) {\n               <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> IndexOutOfBoundsException();\n           } <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-keyword\">if<\/span> (index == <span class=\"hljs-number\">0<\/span>) {\n               <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Mockito\"<\/span>;\n           } <span class=\"hljs-keyword\">else<\/span> {\n               <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"JUnit\"<\/span>;\n           }\n       });\n\n<span class=\"hljs-comment\">\/\/ Testen der definierten Verhaltensweisen<\/span>\nassertEquals(<span class=\"hljs-string\">\"Mockito\"<\/span>, mockedList.get(<span class=\"hljs-number\">0<\/span>));\nassertEquals(<span class=\"hljs-string\">\"JUnit\"<\/span>, mockedList.get(<span class=\"hljs-number\">1<\/span>));\nassertThrows(IndexOutOfBoundsException.class, () -&gt; mockedList.get(<span class=\"hljs-number\">-1<\/span>));<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel verwenden wir <code>Mockito.anyInt()<\/code> als Parameter in der <code>when()<\/code>-Methode, um anzugeben, dass die definierte Verhaltensweise auf jeden ganzzahligen Parameter angewendet werden soll. Innerhalb der <code>thenAnswer()<\/code>-Methode k\u00f6nnen wir dann die \u00fcbergebenen Parameter \u00fcberpr\u00fcfen und entsprechend reagieren. Wir k\u00f6nnen komplexe Logik implementieren, um unterschiedliche R\u00fcckgabewerte oder Ausnahmen basierend auf den \u00fcbergebenen Parametern zu definieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anwendung in JUnit-Tests<\/h2>\n\n\n\n<p>Die Verwendung komplexerer When\/Then-Konstruktionen in JUnit-Tests erm\u00f6glicht es uns, eine breite Palette von Szenarien abzudecken und das Verhalten unserer Klassen unter verschiedenen Bedingungen zu testen. Durch die pr\u00e4zise Steuerung des Mock-Verhaltens k\u00f6nnen wir sicherstellen, dass unsere Klassen korrekt auf verschiedene Eingaben reagieren und angemessene Ausgaben liefern.<\/p>\n\n\n\n<p>Es ist jedoch wichtig, darauf zu achten, dass die Tests lesbar und wartbar bleiben. Zu viele komplexe When\/Then-Konstruktionen k\u00f6nnen den Testcode un\u00fcbersichtlich machen und die Wartbarkeit beeintr\u00e4chtigen. Daher sollten wir sicherstellen, dass wir nur so viele Verhaltensweisen definieren, wie f\u00fcr den Testfall unbedingt erforderlich sind.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Komplexere When\/Then-Konstruktionen in Mockito bieten eine leistungsstarke M\u00f6glichkeit, das Verhalten von Mock-Objekten in JUnit-Tests zu definieren. Durch die pr\u00e4zise Steuerung des Mock-Verhaltens k\u00f6nnen wir verschiedene Testf\u00e4lle abdecken und sicherstellen, dass unsere Klassen korrekt funktionieren. Es ist jedoch wichtig, die Lesbarkeit und Wartbarkeit unserer Tests im Auge zu behalten und sicherzustellen, dass wir sie nicht \u00fcberm\u00e4\u00dfig komplex gestalten. Mit einem ausgewogenen Ansatz k\u00f6nnen wir effektive Tests schreiben, die die Qualit\u00e4t unserer Java-Anwendungen verbessern.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JUnit ist ein beliebtes Framework f\u00fcr das Testen von Java-Anwendungen, w\u00e4hrend Mockito ein leistungsf\u00e4higes Mocking-Framework ist, das h\u00e4ufig in Verbindung mit JUnit verwendet wird. Mocking ist ein wesentliches Konzept im Unit-Testing, bei dem Objekte simuliert werden, um das Verhalten von Abh\u00e4ngigkeiten zu kontrollieren und isolierte Tests durchzuf\u00fchren. Eine der wichtigsten Funktionen von Mockito ist die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-280","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=280"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/280\/revisions"}],"predecessor-version":[{"id":281,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/280\/revisions\/281"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}