{"id":272,"date":"2024-03-09T14:22:44","date_gmt":"2024-03-09T13:22:44","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=272"},"modified":"2024-03-24T14:23:08","modified_gmt":"2024-03-24T13:23:08","slug":"die-nutzung-von-mockito-spys-in-junit-tests","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=272","title":{"rendered":"Die Nutzung von Mockito-Spys in JUnit-Tests"},"content":{"rendered":"\n<p>In der Welt der Softwareentwicklung ist das Testen von Code von entscheidender Bedeutung, um die Qualit\u00e4t und Robustheit von Anwendungen sicherzustellen. In der Java-Welt sind JUnit-Tests die Standardmethode, um die Funktionalit\u00e4t von Code zu \u00fcberpr\u00fcfen. Mockito ist ein beliebtes Framework, das Entwicklern dabei hilft, Mock-Objekte zu erstellen, um externe Abh\u00e4ngigkeiten zu simulieren. Mockito bietet auch die M\u00f6glichkeit, Spys zu verwenden, um Teile von echten Objekten zu mocken und gleichzeitig die Originalimplementierung zu verwenden. In diesem Artikel werden wir uns ausf\u00fchrlich mit der Nutzung von Mockito-Spys in JUnit-Tests befassen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Was sind Mockito-Spys?<\/h4>\n\n\n\n<p>Mockito-Spys sind Teil des Mockito-Frameworks und bieten eine M\u00f6glichkeit, echte Objekte zu teilweise zu mocken. Im Gegensatz zu vollst\u00e4ndigen Mocks, die vollst\u00e4ndige Platzhalter f\u00fcr Objekte erstellen und deren Verhalten vollst\u00e4ndig definieren, erm\u00f6glichen Spys das Mocken von Teilen eines echten Objekts, w\u00e4hrend der Rest des Objekts seine urspr\u00fcngliche Implementierung beibeh\u00e4lt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Warum Mockito-Spys?<\/h4>\n\n\n\n<p>Die Verwendung von Mockito-Spys kann in verschiedenen Szenarien n\u00fctzlich sein. Zum Beispiel, wenn wir eine Methode oder einen Teil einer Klasse testen m\u00f6chten, die mit einer externen Ressource interagiert, wie zum Beispiel einer Datenbank oder einem Dateisystem, aber dennoch Teile des originalen Verhaltens beibehalten wollen. Spys k\u00f6nnen auch verwendet werden, um Teile eines komplexen Objekts zu mocken, w\u00e4hrend der Rest des Objekts seine urspr\u00fcngliche Funktionalit\u00e4t beh\u00e4lt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Die Verwendung von Mockito-Spys in JUnit-Tests<\/h4>\n\n\n\n<p>Um Mockito-Spys in JUnit-Tests zu verwenden, m\u00fcssen wir zun\u00e4chst das Mockito-Framework in unser Projekt integrieren. Dies kann durch Hinzuf\u00fcgen der entsprechenden Maven-Abh\u00e4ngigkeit zu unserer <code>pom.xml<\/code>-Datei erfolgen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.mockito<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>mockito-core<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>3.12.4<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span> <span class=\"hljs-comment\">&lt;!-- Aktuelle Version verwenden --&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">scope<\/span>&gt;<\/span>test<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">scope<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Nachdem wir Mockito zu unserem Projekt hinzugef\u00fcgt haben, k\u00f6nnen wir Mockito-Spys in unseren JUnit-Tests verwenden. Hier ist ein einfaches Beispiel, wie dies gemacht werden kann:<\/p>\n\n\n\n<p>Angenommen, wir haben eine Klasse <code>UserService<\/code>, die eine Methode <code>getUserCount()<\/code> enth\u00e4lt, die die Anzahl der Benutzer in einem System zur\u00fcckgibt. Diese Methode greift auf eine Datenbank zu, um die Benutzeranzahl zu ermitteln. Wir m\u00f6chten <code>getUserCount()<\/code> testen, ohne tats\u00e4chlich auf die Datenbank zugreifen zu m\u00fcssen. Hier kommt Mockito ins Spiel.<\/p>\n\n\n\n<p>Zuerst erstellen wir eine Instanz von <code>UserService<\/code> und dann ein Spy-Objekt davon:<\/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-keyword\">import<\/span> <span class=\"hljs-keyword\">static<\/span> org.mockito.Mockito.*;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">UserServiceTest<\/span> <\/span>{\n\n    @Test\n    public <span class=\"hljs-keyword\">void<\/span> testGetUserCount() {\n        <span class=\"hljs-comment\">\/\/ Erstelle ein echtes Objekt<\/span>\n        UserService userService = <span class=\"hljs-keyword\">new<\/span> UserService();\n\n        <span class=\"hljs-comment\">\/\/ Erstelle ein Spy-Objekt und mocke die Methode getUserCount()<\/span>\n        UserService userServiceSpy = spy(userService);\n        doReturn(<span class=\"hljs-number\">5<\/span>).when(userServiceSpy).getUserCount();\n\n        <span class=\"hljs-comment\">\/\/ Teste die Methode<\/span>\n        assertEquals(<span class=\"hljs-number\">5<\/span>, userServiceSpy.getUserCount());\n    }\n}<\/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 haben wir <code>userServiceSpy<\/code> erstellt, indem wir <code>userService<\/code> gespitzt haben. Dann haben wir die Methode <code>getUserCount()<\/code> des Spys gemockt, um 5 zur\u00fcckzugeben, unabh\u00e4ngig von ihrer tats\u00e4chlichen Implementierung. Durch diese Mocking-Aktion testen wir isoliert die Logik in <code>getUserCount()<\/code> ohne auf die Datenbank zugreifen zu m\u00fcssen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Best Practices f\u00fcr den Einsatz von Mockito-Spys<\/h4>\n\n\n\n<p>Obwohl Mockito-Spys ein m\u00e4chtiges Werkzeug sind, sollten sie mit Bedacht eingesetzt werden. Hier sind einige bew\u00e4hrte Praktiken:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Verwenden Sie Spys, um komplexe Objekte teilweise zu mocken<\/strong>: Verwenden Sie Spys, um nur die Methoden zu mocken, die f\u00fcr Ihren Test relevant sind, und behalten Sie die Originalimplementierung f\u00fcr die restlichen Methoden bei.<\/li>\n\n\n\n<li><strong>Verwenden Sie Spys mit Vorsicht<\/strong>: Spys k\u00f6nnen zu komplexen Testf\u00e4llen f\u00fchren, insbesondere wenn sie mit anderen Mock-Objekten kombiniert werden. Stellen Sie sicher, dass Ihre Tests gut strukturiert und leicht verst\u00e4ndlich sind.<\/li>\n\n\n\n<li><strong>Testen Sie weiterhin die Originalimplementierung<\/strong>: Auch wenn Sie Teile eines Objekts mocken, ist es wichtig, sicherzustellen, dass die Originalimplementierung weiterhin korrekt funktioniert. F\u00fchren Sie daher weiterhin Tests durch, um sicherzustellen, dass die nicht gemockten Teile des Objekts wie erwartet funktionieren.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Fazit<\/h4>\n\n\n\n<p>Mockito-Spys bieten eine leistungsstarke M\u00f6glichkeit, Teile echter Objekte zu mocken, w\u00e4hrend der Rest der Originalimplementierung beibehalten wird. Durch ihre Verwendung k\u00f6nnen wir bestimmte Teile unserer Anwendungen isoliert testen, ohne auf externe Ressourcen zugreifen zu m\u00fcssen. Durch die Einhaltung bew\u00e4hrter Praktiken k\u00f6nnen wir effektive und wartbare Tests schreiben, die die Qualit\u00e4t unserer Software verbessern.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der Welt der Softwareentwicklung ist das Testen von Code von entscheidender Bedeutung, um die Qualit\u00e4t und Robustheit von Anwendungen sicherzustellen. In der Java-Welt sind JUnit-Tests die Standardmethode, um die Funktionalit\u00e4t von Code zu \u00fcberpr\u00fcfen. Mockito ist ein beliebtes Framework, das Entwicklern dabei hilft, Mock-Objekte zu erstellen, um externe Abh\u00e4ngigkeiten zu simulieren. Mockito bietet auch [&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-272","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\/272","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=272"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/272\/revisions"}],"predecessor-version":[{"id":273,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/272\/revisions\/273"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}