Ich verwende JUnit 4 mit Eclipse JDT, um automatisierte Mutant-Tests zu erstellen.Warum gibt JUnitCore nur die ersten Ergebnisse zurück?
ist die allgemeine Übersicht über meine Code-Struktur:
//Basic for loop
for(int i = 0; i < 10; i++) {
//Read in source code from a Java file
...(works)
//Change a line using JDT and save code to a new Java file
...(works)
//Compile new Java file (this also works)
try {
Process compile = Runtime.getRuntime().exec("javac -cp \"src/*\" " + path + "*.java");
compile.waitFor();
} catch(IOException ex) { /*...*/ }
catch(InterruptedException ex) { /*...*/ }
//Run JUnit Tests (this works the first time it is called)
JUnitCore core = new JUnitCore();
Result result = core.run(JUnitTest.class); //This class contains my JUnit Tests
}
Mein Code oben arbeitet für den ersten Test, aber jeder Test nach, dass immer wieder die gleichen Ergebnisse. Warum werden neue Ergebnisse nicht generiert, obwohl verschiedene Mutationen gemacht werden?
Dinge, die ich habe versucht:
Testing, dass verschiedene Mutationen an jeder Schleifeniterationslatenzzeit vorgenommen werden.
Testen, dass der neue Code kompiliert wird, bevor der Test ausgeführt wird.
Wenn Sie die Interna der for-Schleife als Thread ausführen, warten Sie, bis der Thread beendet ist, und führen Sie dann den nächsten Test aus.
Verwendung JUnitCore.runClasses (JUnitTest.class) anstelle von einer Instanz von Kern Erstellung und Aufruf core.run (JUnitTest.class):
JUnitCore core = new JUnitCore(); Result result = core.run(JUnitTest.class);
Substituieren JUnitCore (org. junit) Code für Testrunner (junit.textui), die mir das gleiche Problem haben:
TestSuite suite= new TestSuite(); suite.addTestSuite(JUnitTest.class); TestResult result = TestRunner.run(suite);
Brilliant. Ich habe darüber nachgedacht, eine neue JVM für jede Mutante zu starten, aber ich würde gerne wissen, wie man mit Instrumention Klassen in der JVM ersetzt. Hast du Links wo du anfangen sollst? –
@ZacharyTerlizzese Beginnen Sie mit der offiziellen Dokumentation https://docs.oracle.com/javase/Instrumentation.html und schauen Sie sich an, wie pitest es tut https: // github. com/hcoles/pitest – henry
Vielen Dank für Ihre Hilfe Henry. Ich habe auch diese Lösung gefunden, die in der Lage sein kann, eine Klasse für eine andere unter Verwendung von SomeJavaClass.class.getClassLoader() zu trennen: http://Stackoverflow.com/a/14317506/1008395 –