Eine Geschichte über die Schwierigkeit, ein Testframework an Java 6 auszurichten

Die Seite ist Java 6.

Ich habe die ganze Zeit manuelle Tests durchgeführt, aber es gibt Grenzen, oder? Am Ende schrieb ich Testcode und half bei dieser Schätzung.

Ich habe angefangen, JUnit und Mockito zu sammeln, aber ich weiß es nicht. Ich hatte es schwer, weil es zu alt war und ich die Informationen nicht leicht finden konnte.

Sie werden sterben, wenn Sie zu viel technische Schulden haben? Ein Memorandum als Fall.

JUnit 4.11 Apropos Testcode in Java schreiben, JUnit. Das neueste ist JUnit 5, kann jedoch nur mit Java 8 oder höher verwendet werden. Wählen Sie daher aus 4 Serien. Es muss 4.8 oder höher sein, um die später beschriebene @ Rule-Annotation zu verwenden.

assertJ 1.7.1 Assertionsbibliothek.

Weil es ein Schreibstil ist, indem man sich mit einer Methodenkette verbindet Es ist schwer zu werden ((((Klammer Hölle)))) Sie können eine Pompon-Assert-Anweisung gemäß dem Eclipse-Vorschlag schreiben.

Mockito 1.9.5 Eine Bibliothek, die das Implementieren von Testmodellen ziemlich einfach macht. Es scheint als Mohito zu lesen. Für die JUit5-Serie gibt es Mockito 2.x.x, für die JUnit4-Serie scheint die Stabilität 1.9.5 zu sein.

Was ist ein Mock?

Angenommen, Sie möchten die hogehoge () -Methode der Hoge-Klasse testen. Ob die hogehoge () -Methode von einer anderen Fuga-Klasse abhängt Sie können nicht testen, ohne die Fuga-Klasse vorzubereiten.

Wenn das bei einem Mock der Fall ist "Wenn Sie Fuga # fugafuga () aus der Hoge-Klasse sehen, geben Sie einfach 3 zurück." Kann eingestellt werden. Es ist wichtig, Test in Java zu sagen.

PowerMock 1.5.6 Mockito ist wirklich nützlich, aber Sie können statische Methoden nicht verspotten. PowerMock durch gutes Hacken Sie können statische Methoden ähnlich wie Mockito verspotten. Auch private Methoden.

In dem Bereich, in dem Java seit langem verwendet wird, gibt es auch eine statische Methode Dies ist auch unverzichtbar, weil es schreit (voreingenommen).

Dieser Power Mock und dieses Eclemma, die später beschrieben werden, waren nicht kompatibel und ich hatte es schwer. (In der neuesten Version gelöst)

Ich habe 1.5.6 gewählt, weil Mockito 1.9.x und PowerMock 1.5.x kompatibel sind.

Javassist3.18.2 Javassist ist eine Bibliothek, die beim Spielen mit Java-Bytecode verwendet wird. Java-Bytecode ist die Java-Quelle, die wir geschrieben haben Derjenige, der kompiliert werden kann. Derjenige, der auf der JVM läuft.

PowerMock nutzt dies. Java-Bytecode anstelle der Quelle Es scheint, dass der Schein realisiert wird, indem man ihn gut umschreibt. (Ich kenne die Details nicht und diese Erklärung kann falsch sein)

Javassist 3.4 ist im bestehenden Projekt enthalten. Das war die höchste Priorität. Als ich wütend war, war ich süchtig nach "Was? Du bist dabei?"

QuickJUnit Eclipse-Plug-In zum Schreiben von JUnit. Es gibt verschiedene Verknüpfungen und Vorlagen.

Eclemma 3.0.1 ** Ecl ** ipse + ** EMMA ** Bibliothek. Ein Plug-In zum Ausführen von EMMA, das die Testabdeckung misst, auf Eclipse. Eclemma hat vor langer Zeit aufgehört zu aktualisieren und ich wollte unbedingt JaCoCo verwenden.

Eclemma und PowerMock 1.5.6 sind sehr inkompatibel. Wenn ich einen Test mit PowerMock durchführe, wird eine Abdeckung von 0% angezeigt.

Eclemma betrachtet den Java-Bytecode, den ich gerade beschrieben habe, und sieht, wo er ausgeführt wurde. Ich schaue zu PowerMock (um statische Methoden zu verspotten) Weil (eine Kopie von) diesem Bytecode mit Javassist bearbeitet und ausgeführt wird.

Dieses Problem wurde für Java8, JUnit5 und höher gelöst.

Regelanmerkung

Indem Sie es anstelle von RunWith verwenden Das obige "0% Deckungsproblem" kann vermieden werden.

Referenz: https://code.i-harness.com/ja/q/1647e8c

Zusammenfassung

Das ist alles (denke ich) Ich konnte Testcode für verschiedene Methoden schreiben, ausführen und die Abdeckung messen.

Es ist immer noch gut, weil es Java ist, weil es nur schwer zu finden ist, und wenn Sie danach suchen, wird es herauskommen.

Warum hast du es so schwer gehabt?

(1) Es sind mehrere Probleme gleichzeitig aufgetreten.

Javassist-Versionskonflikt und PowerMock und Eclemma "0% Deckungsproblem"

Indirekt, weil die Eclipse-Version zu alt ist und sich kein Maven in der Entwicklungsumgebung befindet Es war sehr mühsam, Plug-Ins und Bibliotheken zu installieren, und es gab Probleme.

Auch wenn es eins nach dem anderen ein triviales Problem ist Wenn mehrere Vorkommen auftreten, erhöht sich die für die Auflösung erforderliche Zeit sofort.

② Informationen werden vergraben, weil sie bereits aufgelöst wurden

Für JUnit 5 und höher wurde das Problem "0% Abdeckung" von PowerMock und Eclemma gelöst.

Mit anderen Worten, es wurde vor zwei Jahren in der Welt gelöst. Wenn Sie also jetzt mit diesen beiden Schlüsselwörtern umgehen, Die Art und Weise, RunWith zu schreiben, die die Regelanmerkung nicht verwendet, ist erfolgreicher. (Es scheint ärgerlich zu sein, in Regel zu schreiben)

Serpentin

Es fiel mir schwer, daraus ein Verfahren zu machen, aber diese Test-Framework-Gruppe Ich weiß nicht, ob es wie vorgeschlagen angenommen wird.

Vor allem wird gesagt, dass "100% Deckung unerlässlich ist", also habe ich ein schlechtes Gefühl.

Nachtrag

"Das Schreiben eines Tests braucht Zeit, also machen wir einen manuellen Test." Ich bin zu dem Schluss gekommen.

Was für ein Urteil! Ich meine, ich mache einen manuellen Testfall! Ich hasse es! !!

Recommended Posts

Eine Geschichte über die Schwierigkeit, ein Testframework an Java 6 auszurichten
Eine Geschichte über die Entwicklung von ROS namens Rosjava mit Java
[Hinweis] Eine Geschichte über das Ändern von Java-Build-Tools mit VS-Code
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Eine Geschichte über die Java 11-Unterstützung für Webdienste
Eine Geschichte über das JDK in der Java 11-Ära
Die Geschichte des Versuchs, JAVA File zu bedienen
[PHP] Geschichte der Ausgabe von PDF mit TCPDF + FPDI
Eine Geschichte über den Versuch, mit Mockito auszukommen
Eine Geschichte über das Bemühen, JAR-Dateien zu dekompilieren
Eine Geschichte über die Reduzierung des Speicherverbrauchs auf 1/100 mit find_in_batches
Eine Geschichte über die Einführung von Evolutions in das Play Framework
Die Geschichte der Erstellung einer Task-Management-Anwendung mit Swing, Java
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Eine verwirrte Geschichte über einen ternären Operator mit mehreren bedingten Ausdrücken
Eine Geschichte über Missverständnisse im Umgang mit Java-Scannern (Memo)
Hinweise zu Java GC
Optimieren Sie Java-Tests mit Spock
Eine Geschichte, die bei NotSerializableException steckt
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
Erfahren Sie mehr über Transaktionssicherungspunkte (mit Java)
Wirklich beängstigende (Java Anti-Pattern) Geschichte
Informationen zur Signaturauthentifizierung mit Java Time 1
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
Eine Geschichte über ein in Java geschriebenes Spring Boot-Projekt, das Kotlin unterstützt
[Anfänger] Geschichte über das Studium von Java für die Jobsuche ~ 2. Monat ~
[Anfänger] Eine Geschichte über das Studium von Java für die Jobsuche ~ 3. Monat ~
[Anfänger] Eine Geschichte über das Studium von Java für die Jobsuche ~ 1. Monat ~
[Anfänger] Eine Geschichte über das Studium von Java für die Jobsuche ~ 5. Monat ~
[Anfänger] Eine Geschichte über das Studium von Java für die Jobsuche ~ 4. Monat ~