{"id":284,"date":"2024-03-15T14:36:04","date_gmt":"2024-03-15T13:36:04","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=284"},"modified":"2024-03-24T14:39:07","modified_gmt":"2024-03-24T13:39:07","slug":"mocken-von-void-methoden-mit-mockito-in-junit-tests","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=284","title":{"rendered":"Mocken von Void-Methoden mit Mockito in JUnit-Tests"},"content":{"rendered":"\n<p>Das Testen von Java-Anwendungen ist eine grundlegende Praxis, um die Qualit\u00e4t und Zuverl\u00e4ssigkeit des Codes sicherzustellen. JUnit ist eine der beliebtesten Frameworks, um automatisierte Tests f\u00fcr Java-Anwendungen zu schreiben. Mockito ist wiederum ein leistungsstarkes Mocking-Framework, das es Entwicklern erm\u00f6glicht, objektbasierte Tests zu schreiben, ohne echte Abh\u00e4ngigkeiten zu verwenden. In diesem Artikel werden wir uns darauf konzentrieren, wie man Mockito verwendet, um Void-Methoden in JUnit-Tests zu mocken und wie ein ArgumentCaptor genutzt werden kann, um die Aufrufargumente zu erfassen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Was ist Mocking?<\/h4>\n\n\n\n<p>Bevor wir uns mit dem Mocken von Void-Methoden befassen, lassen Sie uns kurz erkl\u00e4ren, was Mocking \u00fcberhaupt ist. Mocking ist eine Technik im Software-Testing, bei der k\u00fcnstliche Objekte erstellt werden, um reale Objekte zu simulieren. Diese k\u00fcnstlichen Objekte, auch als Mocks bezeichnet, ahmen das Verhalten von echten Objekten nach und erm\u00f6glichen es, Tests durchzuf\u00fchren, ohne auf tats\u00e4chliche Abh\u00e4ngigkeiten angewiesen zu sein. Dies erleichtert das isolierte Testen von Codeeinheiten und erh\u00f6ht die Testgeschwindigkeit und -effizienz.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Mockito: Ein \u00dcberblick<\/h4>\n\n\n\n<p>Mockito ist ein popul\u00e4res Mocking-Framework f\u00fcr Java, das eine einfache und expressive API bietet, um Mock-Objekte zu erstellen und zu verwalten. Mit Mockito k\u00f6nnen Entwickler Methodenaufrufe auf Mock-Objekten spezifizieren, Verhalten definieren und Erwartungen setzen. Dies macht Mockito zu einem \u00e4u\u00dferst n\u00fctzlichen Werkzeug f\u00fcr das Testen von Java-Anwendungen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Das Mocken von Void-Methoden<\/h4>\n\n\n\n<p>Eine Void-Methode ist eine Methode, die keinen R\u00fcckgabewert hat. Das Mocken solcher Methoden mit Mockito erfordert eine spezielle Vorgehensweise. Hier ist eine schrittweise Anleitung, wie man Void-Methoden mit Mockito in JUnit-Tests mockt:<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">1. Abh\u00e4ngigkeiten einrichten<\/h5>\n\n\n\n<p>Stellen Sie sicher, dass Sie die erforderlichen Abh\u00e4ngigkeiten f\u00fcr Mockito und JUnit in Ihrem Projekt konfiguriert haben. In den meisten Build-Management-Tools wie Maven oder Gradle k\u00f6nnen Sie diese Abh\u00e4ngigkeiten einfach hinzuf\u00fcgen.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">2. Mock-Objekt erstellen<\/h5>\n\n\n\n<p>Verwenden Sie Mockito, um ein Mock-Objekt f\u00fcr die Klasse zu erstellen, die die Void-Methode enth\u00e4lt. Dies kann mit der <code>mock()<\/code>-Methode von Mockito erfolgen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">FooService fooServiceMock = Mockito.mock(FooService<span class=\"hljs-class\">.<span class=\"hljs-keyword\">class<\/span>);<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier wird ein Mock-Objekt f\u00fcr die Klasse <code>FooService<\/code> erstellt.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">3. Verhalten festlegen<\/h5>\n\n\n\n<p>Definieren Sie das Verhalten f\u00fcr die Void-Methode des Mock-Objekts. Dies erfolgt mithilfe der <code>doNothing()<\/code>, <code>doThrow()<\/code>, <code>doAnswer()<\/code> oder <code>doReturn()<\/code> Methoden von Mockito, je nachdem, welches Verhalten Sie simulieren m\u00f6chten.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">Mockito<\/span><span class=\"hljs-selector-class\">.doNothing<\/span>()<span class=\"hljs-selector-class\">.when<\/span>(<span class=\"hljs-selector-tag\">fooServiceMock<\/span>)<span class=\"hljs-selector-class\">.voidMethod<\/span>();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier wird festgelegt, dass die Void-Methode <code>voidMethod()<\/code> des Mock-Objekts nichts tun soll.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">4. Test ausf\u00fchren<\/h5>\n\n\n\n<p>F\u00fchren Sie Ihren Test aus und \u00fcberpr\u00fcfen Sie, ob das Verhalten des Mock-Objekts wie erwartet ist. In diesem Fall m\u00f6chten Sie sicherstellen, dass die Void-Methode wie erwartet aufgerufen wird.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-comment\">\/\/ Hier wird die zu testende Methode aufgerufen, die voidMethod() aufruft<\/span>\nsomeObject.doSomething();\n<span class=\"hljs-comment\">\/\/ \u00dcberpr\u00fcfen, ob die voidMethod() aufgerufen wurde<\/span>\nMockito.verify(fooServiceMock).voidMethod();<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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>Mit <code>verify()<\/code> k\u00f6nnen Sie \u00fcberpr\u00fcfen, ob die angegebene Methode auf dem Mock-Objekt aufgerufen wurde.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Verwendung des ArgumentCaptors<\/h4>\n\n\n\n<p>Manchmal m\u00f6chten Sie nicht nur \u00fcberpr\u00fcfen, ob eine Void-Methode aufgerufen wurde, sondern auch die Argumente, mit denen sie aufgerufen wurde, erfassen und \u00fcberpr\u00fcfen. Hier kommt der ArgumentCaptor ins Spiel.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">5. ArgumentCaptor verwenden<\/h5>\n\n\n\n<p>Ein ArgumentCaptor erfasst Argumente, die beim Aufruf einer Methode \u00fcbergeben werden, und erm\u00f6glicht es Ihnen, diese Argumente sp\u00e4ter zu \u00fcberpr\u00fcfen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-comment\">\/\/ Erstellen Sie einen ArgumentCaptor f\u00fcr den Typ der erwarteten Argumente<\/span>\nArgumentCaptor&lt;<span class=\"hljs-built_in\">String<\/span>&gt; argumentCaptor = ArgumentCaptor.forClass(<span class=\"hljs-built_in\">String<\/span>.class);\n\n<span class=\"hljs-comment\">\/\/ Definieren Sie das Verhalten des Mock-Objekts und erfassen Sie die Argumente<\/span>\nMockito.doNothing().when(fooServiceMock).voidMethod(argumentCaptor.capture());\n\n<span class=\"hljs-comment\">\/\/ Hier wird die zu testende Methode aufgerufen, die voidMethod() mit einem Argument aufruft<\/span>\nsomeObject.doSomethingWithArgument(<span class=\"hljs-string\">\"argumentValue\"<\/span>);\n\n<span class=\"hljs-comment\">\/\/ \u00dcberpr\u00fcfen Sie, ob die voidMethod() aufgerufen wurde und das erwartete Argument erfasst wurde<\/span>\nMockito.verify(fooServiceMock).voidMethod(argumentCaptor.getValue());<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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>Durch Verwendung des ArgumentCaptors k\u00f6nnen Sie sicherstellen, dass die Void-Methode mit den erwarteten Argumenten aufgerufen wurde.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Fazit<\/h4>\n\n\n\n<p>Das Mocken von Void-Methoden mit Mockito in JUnit-Tests ist eine wichtige Technik, um isolierte Tests f\u00fcr Java-Anwendungen zu schreiben. Indem Sie Mockito verwenden, k\u00f6nnen Sie das Verhalten von Objekten steuern, ohne auf tats\u00e4chliche Abh\u00e4ngigkeiten angewiesen zu sein. Durch die Integration von ArgumentCaptors k\u00f6nnen Entwickler nicht nur \u00fcberpr\u00fcfen, ob eine Void-Methode aufgerufen wurde, sondern auch die \u00fcbergebenen Argumente erfassen und \u00fcberpr\u00fcfen, um sicherzustellen, dass ihre Tests robust und vollst\u00e4ndig sind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Testen von Java-Anwendungen ist eine grundlegende Praxis, um die Qualit\u00e4t und Zuverl\u00e4ssigkeit des Codes sicherzustellen. JUnit ist eine der beliebtesten Frameworks, um automatisierte Tests f\u00fcr Java-Anwendungen zu schreiben. Mockito ist wiederum ein leistungsstarkes Mocking-Framework, das es Entwicklern erm\u00f6glicht, objektbasierte Tests zu schreiben, ohne echte Abh\u00e4ngigkeiten zu verwenden. In diesem Artikel werden wir uns darauf [&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-284","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\/284","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=284"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/284\/revisions"}],"predecessor-version":[{"id":285,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/284\/revisions\/285"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}