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.
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.
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.
Zuerst las ich die Quelle von junit nacheinander, aber aus den folgenden Gründen habe ich nur den Hauptfluss erfasst.
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/).
Die Erklärung zum Erstellen einer Testklasse und zum Kompilieren einer Testklasse entfällt.
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.
Wie macht JUnit die Arbeit? Gibt es einen speziellen Mechanismus? Das Fazit ist, dass Sie nichts Schwieriges tun, sondern nur Reflection verwenden.
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.
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.
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.
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)
Siehe GitHub. Derzeit ist die Klassenstruktur etwas anders.
Die guten Punkte zu versuchen sind wie folgt.
Recommended Posts