Java >> Java Tutorial >  >> Java

12 Tools, die ich zum Schreiben von Unit- und Integrationstests verwende

Ich denke, dass Softwareentwicklung mehr als nur ein Job ist. Ich sehe mich als Handwerker, der jeden Tag versucht besser zu werden. Der "einfachste Weg", dies zu tun, besteht darin, ein paar gute Tools zu finden und die Antworten auf diese Fragen zu finden:

  • Wann sollte ich das Tool X verwenden?
  • Wie sollte ich das Tool X verwenden?

Automatisiertes Testen ist ein sehr wichtiger Teil der Softwareentwicklung, aber ich habe nicht viele Blogbeiträge gesehen, die einen einen Blick in die Toolbox anderer Entwickler werfen lassen.

In diesem Blogbeitrag können Sie einen Blick in meine Toolbox werfen. Ich werde 12 Tools vorstellen, die ich zum Schreiben von Unit- und Integrationstests verwende. Ich werde auch Links zu anderen interessanten Webseiten bereitstellen, die Ihnen helfen zu verstehen, wie Sie sie verwenden können.

Fangen wir an.

Einen Blick in meine Toolbox werfen

Bevor wir die in diesem Blogbeitrag beschriebenen Tools verwenden können, müssen wir einen Build erstellen, der sowohl Komponenten- als auch Integrationstests ausführen kann. Ich habe zwei Blogbeiträge geschrieben, die beschreiben, wie wir dies tun können:

  • Integration Testing with Maven beschreibt, wie wir einen Maven-Build erstellen können, der unterschiedliche Verzeichnisse für Unit- und Integrationstests hat.
  • Getting Started With Gradle:Integration Testing With the TestSets Plugin beschreibt, wie wir einen Gradle-Build erstellen können, der verschiedene Verzeichnisse für Unit- und Integrationstests hat.

Wir sind jetzt bereit, einen genaueren Blick auf meine Werkzeugkiste zu werfen. Ich habe meine Tools in verschiedene Kategorien eingeteilt, was das Lesen dieses Blogposts erleichtert.

Ich gebe Ihnen 12 Tools, die ich zum Schreiben von Einheiten- und Integrationstests verwende:

Laufende Tests

JUnit ist ein Framework, das ich zum Schreiben von Unit- und Integrationstests verwende. Ich mag JUnit, weil es das beliebteste Testframework für die Programmiersprache Java ist. Mit anderen Worten, es hat viele Erweiterungen und es ist einfach, Lösungen für Ihre Probleme zu finden.

NestedRunner ist ein JUnit-Runner, mit dem wir Testmethoden ausführen können, die in verschachtelten inneren Klassen platziert sind. Ich mag NestedRunner aus folgenden Gründen:

  • Wir können lange Methodennamen durch eine Klassenhierarchie im BDD-Stil ersetzen.
  • Wir können doppelten Code entfernen, indem wir diesen Code in Setup-Methoden verschieben und diese Methoden in die richtigen inneren Klassen einfügen.
  • Wir können die Konstanten mit den Testfällen verknüpfen, die sie verwenden, indem wir die Konstanten in der richtigen inneren Klasse deklarieren.

junit-dataprovider ist ein JUnit-Runner, der es uns ermöglicht, parametrisierte Tests zu schreiben, indem wir einen TestNG-ähnlichen Datenanbieter verwenden. Dies ist eine enorme Verbesserung gegenüber der Standardmethode zum Schreiben parametrisierter Tests, die ziemlich beschissen ist.

Zusätzliche Lektüre:

  • Unit Testing with JUnit beschreibt, wie wir Unit Tests mit JUnit 4.X schreiben können.
  • Clean Tests schreiben:Small Is Beautiful beschreibt, wie wir die Probleme lösen können, die bei „sauberen“ Unit-Tests gefunden werden.
  • junit-dataprovider:Erste Schritte beschreibt, wie wir mit der Verwendung von junit-dataprovider beginnen können.
  • junit-dataprovider:Features beschreibt die Features des junit-dataprovider.
  • Alternative zu JUnit-parametrisierten Klassen:junit-dataprovider beschreibt, wie wir die standardmäßigen parametrisierten Tests durch Tests ersetzen können, die den junit-dataprovider verwenden.

Mocking, Stubbing und Fakeing Stuff

Mockito ist das beliebteste Mocking-Framework zum Schreiben von Unit-Tests. Ich mag es, weil es eine einfache API, viele nützliche Funktionen und eine hervorragende Dokumentation hat.

Greenmail ist ein In-Memory-E-Mail-Server, der SMTP, POP3 und IMAP mit SSL-Socket-Unterstützung unterstützt. Ich mag es, weil es wirklich einfach zu bedienen ist. Als ich nach einem „gefälschten“ E-Mail-Server suchte, probierte ich mehrere Alternativen aus, und Greenmail war der einzige, der so funktionierte, wie ich es wollte.

MockFtpServer ist eine Bibliothek, die zwei verschiedene FTP-Serverimplementierungen (Fake/Stub) bereitstellt, die zum Testen verschiedener Szenarien nützlich sind. Wenn wir Testcode benötigen, der mit einem FTP-Server interagiert, ist MockFtpServer unsere bevorzugte Waffe.

Zusätzliche Lektüre:

  • Das Mockito-Referenzhandbuch ist ein hervorragendes Beispiel für eine Referenzdokumentation, die Ihnen tatsächlich hilft, Ihre Arbeit zu erledigen.
  • Integration Testing IMAP, SMTP and POP3 with Greenmail beschreibt, wie Sie Integrationstests für Code schreiben können, der E-Mail-Nachrichten sendet.
  • FakeFtpServer - Erste Schritte beschreibt, wie Sie den FakeFtpServer verwenden können.
  • StubFtpServer - Erste Schritte beschreibt, wie Sie den StubFtpServer verwenden können.
  • FakeFtpServer oder StubFtpServer? hilft Ihnen bei der Entscheidung, welche FTP-Serverimplementierung Sie in Ihren Tests verwenden sollten.

Behauptungen schreiben

Hamcrest stellt Matcher bereit, mit denen wir Assertionen für unsere Unit- und Integrationstests schreiben können. Ich verwende es, wenn ich Zusicherungen für Komponenten- oder Integrationstests schreiben muss, die das Spring MVC Test-Framework verwenden.

AssertJ bietet eine fließende API zum Schreiben von Behauptungen mit hilfreichen Fehlermeldungen. Es verbessert die Lesbarkeit unseres Testcodes und hilft uns, unsere Testfälle in ausführbare Spezifikationen umzuwandeln, die die richtige domänenspezifische Sprache sprechen.

Zusätzliche Lektüre:

  • Das Hamcrest-Tutorial beschreibt, wie Sie mit Hamcrest beginnen können.
  • Verwenden von Hamcrest zum Testen beschreibt, wie Sie reguläre Hamcrest-Matcher in Ihren Einheitentests verwenden und ihre Fähigkeiten erweitern können, indem Sie benutzerdefinierte Matcher erstellen.
  • AssertJ Core Overview bietet einen Überblick über AssertJ Core.
  • Turning Assertions into a Domain-Specific Language beschreibt, wie wir benutzerdefinierte AssertJ-Assertionen erstellen können.
  • Writing Clean Tests:Replace Assertions With a Domain-Specific Language beschreibt, warum wir reguläre JUnit-Assertionen durch benutzerdefinierte Assertions ersetzen sollten, die die richtige domänenspezifische Sprache verwenden.

Datenzugriffscode testen

H2 ist eine sehr schnelle In-Memory-Datenbank, die zum Schreiben von Integrationstests nützlich ist, die in der lokalen Entwicklungsumgebung ausgeführt werden.

DbUnit ist eine JUnit-Erweiterung, die verwendet werden kann, um die Datenbank vor jedem Integrationstest in einen bekannten Zustand zu initialisieren und sicherzustellen, dass die Datenbank die richtigen Daten enthält. DbUnit hat seine Warzen, aber es ist ein sehr nützliches Werkzeug, weil es uns hilft, die Testdatenerstellung vom getesteten Code zu trennen.

Zusätzliche Lektüre:

  • DbUnit-Kernkomponenten beschreibt die Kernkomponenten von DbUnit. Wenn wir Tests schreiben wollen, die DbUnit verwenden, sollten wir wissen, was diese Komponenten sind.
  • DbUnit Best Practices bietet fünf Regeln, die uns helfen, bessere Tests für unseren Datenzugriffscode zu schreiben.
  • Das Schreiben von Tests für Datenzugriffscode hilft uns, deterministische Datenzugriffstests zu schreiben, die das Richtige testen, leicht zu lesen und zu warten sind.

Testen von Spring-Anwendungen

Frühjahrstest ist das Schweizer Taschenmesser zum Schreiben automatisierter Tests für Spring-Anwendungen. Es bietet eine erstklassige Unterstützung für das Schreiben von Einheiten- und Integrationstests für Spring-betriebene Anwendungen.

Spring Test DbUnit integriert DbUnit mit dem Spring Test Framework. Wenn wir Datenzugriffstests für eine Spring-Anwendung schreiben müssen, die eine relationale Datenbank verwendet, hilft uns Spring Test DbUnit dabei.

Zusätzliche Lektüre:

  • The Spring Framework Reference Manual:11. Testing beschreibt jede Funktion des Spring Test Frameworks.
  • Spring MVC Test Tutorial beschreibt, wie wir Komponenten- und Integrationstests für Spring MVC-Controller schreiben können.
  • Spring Data JPA Tutorial:Integration Testing beschreibt, wie Sie Datenzugriffstests für unsere von Spring unterstützten Repositories schreiben können.
  • Spring From the Trenches:Using Null Values ​​in DbUnit Datasets beschreibt, wie wir Nullwerte in unseren DbUnit-Datasets verwenden können, wenn wir Datenzugriffstests für eine Spring-Anwendung schreiben.
  • Spring From the Trenches:Zurücksetzen der automatischen Inkrementspalten vor jeder Testmethode beschreibt, wie wir die automatischen Inkrementspalten vor jeder Testmethode zurücksetzen können, wenn wir Datenzugriffstests für eine Spring-Anwendung schreiben.

Welche Testtools verwenden Sie?

Ich habe jetzt die Tools enthüllt, die ich zum Schreiben von Unit- und Integrationstests verwende. Ich fordere Sie auf, dasselbe zu tun. Sie können an dieser Herausforderung teilnehmen, indem Sie diesen einfachen Schritten folgen:

  • Wenn Sie einen Blog haben, können Sie einen Blogbeitrag schreiben und einen Kommentar zu diesem Blogbeitrag hinterlassen.
  • Wenn Sie kein Blog haben, können Sie einen Kommentar zu diesem Blogbeitrag hinterlassen.

Warum sollten Sie das tun?

Nun, wenn es Ihnen nicht genug ist, anderen Menschen zu helfen, verspreche ich Ihnen, Ihnen dabei zu helfen, mehr Leser zu gewinnen, indem ich auf Ihren Blog-Beitrag verlinke, ihn twittere und ihn mit der Java Testing Society teile.


Java-Tag