[JAVA] Lass uns JUnit machen.

Motivation

Haben Sie jemals den Satz "Um etwas zu studieren, ist es am besten, es zu machen" gehört? Obwohl ich JUnit geschäftlich verwendet habe, wusste ich nicht, wie es hergestellt wurde. Da ich das Unternehmen verlassen habe und gerade den Job wechsle, habe ich Zeit und habe beschlossen, meine eigene Version von JUnit zu erstellen.

JUnit-Version, auf die Bezug genommen wird

Ich habe nach dem JUnit-Quellcode gesucht, aber nur JUnit4 und JUnit5 gefunden. (Außer offiziell gibt es andere als JUnit4 und JUnit5.) Es gibt zwei Verzeichnisse unter "junit4 / src / main / java /" von JUnit4-Quellcode.

  1. junit
  2. org/junit

Wenn man nach innen schaut, scheinen verschiedene Quellen gespeichert zu sein. Vorläufig habe ich beschlossen, mich auf "junit" zu beziehen. Der Grund ist wie folgt.

  1. In der Nähe von Kent Becks "Test Driven Development: By Example"
  2. Einfacher Code

Rauer Fluss von JUnit

Wie haben Sie nachgeforscht?

Zuerst las ich die Quelle von junit nacheinander, aber aus den folgenden Gründen habe ich nur den Hauptfluss erfasst.

  1. Es gibt eine anständige Anzahl von Klassen.
  2. Ich wollte ein Tool zum Organisieren von Klassenbeziehungen, aber ich wollte es nicht.
  3. Es ist ein Schmerz, wenn Sie es nur die ganze Zeit lesen.

Führen Sie JUnit aus

JUnit wird gemäß dem folgenden Ablauf ausgeführt. Wenn Sie es für geschäftliche Zwecke verwenden, ist die integrierte Entwicklungsumgebung gut geeignet. Weitere Informationen finden Sie auf der [offiziellen Seite] von JUnit (https://junit.org/junit4/).

  1. Erstellen Sie eine Testklasse.
  2. Kompilieren Sie die Testklasse.
  3. Führen Sie TestRunner aus.

Die Erklärung zum Erstellen einer Testklasse und zum Kompilieren einer Testklasse entfällt.

Führen Sie TestRunner aus.

Führen Sie einen Befehl wie den folgenden aus.

java -cp Eine Klasse, die die erforderlichen Bibliothekstests ausführt(Junit für JUnit3.textui.TestRunner)Getestete Klasse

Wichtig ist, dass Sie die Klasse angeben, in der der Test ausgeführt werden soll, und die Klasse, die getestet werden soll.

JUnit-Analyse

Wie macht JUnit die Arbeit? Gibt es einen speziellen Mechanismus? Das Fazit ist, dass Sie nichts Schwieriges tun, sondern nur Reflection verwenden.

Schauen Sie sich den Einstiegspunkt an

Sie wissen, dass die Klasse der Einstiegspunkt ist, da Sie eine Klasse haben, die die Tests ausführt. Wenn Sie sich tatsächlich `junit4 / src / main / java / junit / textui / TestRunner.java``` ansehen, gibt es eine` main () `Methode. Junit liest also einfach die main () `` Methode. Ich mache nichts Besonderes.

So führen Sie die Testmethode aus

Wie führen Sie die Testmethode aus, nachdem Sie den Einstiegspunkt kennen? Verschiedene Methoden werden von der `main ()` Methode früher aufgerufen, aber diejenigen, die die Methoden tatsächlich ausführen, sind wie folgt.

junit4/src/main/java/junit/framework/TestCase.Java RunTest()Methode

Wenn man sich den Inhalt ansieht, ist es nur `method.invoke ()`. (Methode ist Methodentyp) Dies ist ein Merkmal von Reflection.

Was ist Reflexion?

Einfach ausgedrückt ist Reflection eine Funktion, mit der Sie Klassen- und Methodeninformationen zur Laufzeit lesen und ausführen können. Es ist lange her, aber es war berühmt als schwarze Magie. Der Vorteil von Reflection ist, dass Sie flexibel mit Klassen und Methoden arbeiten können. Der Nachteil ist die Kehrseite des Vorteils. Die Ausführungsgeschwindigkeit ist langsam, da die JVM zur Laufzeit Informationen sammeln muss. Sie können auch private Methoden ausführen. Wenn Sie sie also falsch verwenden, ist sie fehlerhaft.

Versuchen Sie zu implementieren

Klassenstruktur

Ich habe die minimal notwendigen Kenntnisse, um zu versuchen, JUnit oben zu machen. Ich dachte über die Klasse nach, die ich brauchte, unter der Annahme, dass sie die minimale Funktionalität erfüllen würde.

--Assert (liefert assertEquals) --TestResult (Testergebnis halten) --TestRunner (Einstiegspunkt) --TestCase (Superklasse der Testklasse)

Code

Siehe GitHub. Derzeit ist die Klassenstruktur etwas anders.

Wie war es

Die guten Punkte zu versuchen sind wie folgt.

  1. Nach einer langen Zeit des Klassendesigns wurde ich ein Gehirntrainer.
  2. Es ist einfacher, motiviert zu bleiben, als Code zu lesen

Recommended Posts

Lass uns JUnit machen.
junit
Lassen Sie uns eine Instanz mit .new selbst erstellen. .. ..
JUnit 4 Notizen
JUnit Geschichte
Lassen Sie uns eine Java-Entwicklungsumgebung erstellen (Aktualisierung)
JUnit Memorandum
Erstellen wir eine REST-API mit WildFly Swarm.
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Erstellen Sie mit SwiftUI 2.0 eine benutzerdefinierte Registerkartenansicht
Lassen Sie uns mit Java ein supereinfaches Webframework erstellen
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Einführung]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Einführung]
Lassen Sie uns schnell eine App erstellen, die Firestore verwendet! !!
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [99. Mod-Ausgabe]