2014-11-11 6 views
5

Ich versuche eine definitive Antwort auf die Verwendung von Hamcrest-Matcher in Nicht-Test-Code zu finden. Ich habe ein wenig Forschung getan, und haben einige gegensätzliche Zitate:Ist es akzeptabel, Hamcrest-Matcher im Nicht-Test-Code zu verwenden?

  • hamcrest auf Wikipedia:

    hamcrest ist ein Framework, das unterstützt Software-Tests in der Programmiersprache Java geschrieben werden. [snip] Diese Matcher werden in Unit-Test-Frameworks wie JUnit 2 und jMock verwendet.

  • hamcrest auf Github:

    hamcrest ist eine Bibliothek von Matcher, die in kombiniert werden können flexible Ausdrücke Absichts in Tests zu erstellen.

  • hamcrest auf Google Code:

    Hinweis: hamcrest es ist kein Test Bibliothek: es passiert einfach, dass Matcher für die Prüfung sehr nützlich sind.

persönlich verbinde ich Matchers mit Tests, so neige ich dazu, mit ihnen außerhalb von Tests zu vermeiden. Allerdings sehe ich keine Einschränkungen, die verhindern würden, dass sie außerhalb eines Testumfangs verwendet werden.

Kommt es dann auf eine persönliche Präferenz an?

+4

Verwenden Sie es einfach. Ich sehe nicht, warum es nicht akzeptabel wäre, sie zu benutzen. – morgano

Antwort

5

Ich habe Hamcrest in Nicht-Test-Code mehrmals bis jetzt verwendet. Meistens benutze ich es, wenn ich verschiedene Bedingungen auf dem gleichen Objekt testen möchte, um einen Bericht darüber zu erhalten, welche Bedingung (en) aus welchen Gründen fehlgeschlagen sind. Die einzelnen Bedingungen werden dann als verschiedene Objekte dargestellt, die auch einige andere gute Effekte haben. Beispielsweise kann das Überprüfen der Anwendungskonfiguration Ergebnisse liefern, welche Daten für welche Operationen unterstützt werden.

Gründe, warum ich besonders hamcrest für diese Art von Aufgabe verwenden:

  • es entworfen wurde, dies zu tun (Bedingungen Prüfung wird nicht nur in Testcode getan)
  • es zusätzliche Abhängigkeiten nicht zusammen bringen
  • weithin als viele bekannte verwenden es bereits für Testcode
  • hat eine einfache und kleine API verwenden
  • einfach erweiterbar ist und die Zusammensetzung sehr gut unterstützt

Endlich läuft es darauf hinaus, das richtige Werkzeug für den Job zu wählen. Zum Beispiel kann die Bean-Validierung für relativ ähnliche Jobs verwendet werden.Dann muss eine durchdachte Entscheidung getroffen werden, die auch die Anforderungen des Entwicklungsprozesses und der Umgebung berücksichtigt.

Auch die Verwendung von Matchern ist eine gute Möglichkeit, die Tell, nicht nach Prinzip. Sie können einen Matcher an Methode übergeben, um anzugeben, welchen Rückgabewert Sie erwarten, dass er zurückgegeben wird. Wenn das fragliche Objekt nicht mit diesem Matcher übereinstimmt, kann sofort eine Ausnahme mit einer guten Beschreibung des Fehlers ausgelöst werden.

Auch beim Vergleich der Verwendung von Matcher mit der Predicate von Java 8 haben die Matcher den Vorteil, dass sie eine Beschreibung liefern können, aber der Nachteil, dass sie keine funktionale Schnittstelle selbst sind.