Ich versuche, JUnit für meine Funktionstests zu verwenden. Grundsätzlich mache ich das, um Zugriff auf die JUnit-Berichte zu haben. Leider habe ich ein Problem beim Versuch, JUnit von einer Hauptmethode aus zu starten.Junit startet keinen Testfall, wenn es eine anonyme Klasse ist
Grundsätzlich Ich entwickle eine funktionelle Prüfwerkzeug in dem der Benutzer einen Testdateinamen als Parameter von der Befehlszeile zur Verfügung stellen kann. Ich habe es vereinfacht ein wenig unter:
import org.junit.runner.JUnitCore;
public class MainClass {
public static void main(String[] args) throws Exception {
TestCase testCase = new TestCase() {
@Override
public String getPath() {
return args[0];
}
};
JUnitCore junit = new JUnitCore();
junit.run(testCase.getClass());
}
}
Die Testcase-Klasse dann auf der mitgelieferten Parameter wirkt und liefert Ausgangs:
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestCase {
private static final Logger LOGGER = LoggerFactory.getLogger(TestCase.class);
public String getPath() {
return "etc/Default.flow";
}
@Test
public void testFunc() {
try {
LOGGER.info("Entered testFunc()");
Launcher launcher = new Launcher(getPath());
launcher.launch();
launcher.awaitCompletion();
Assert.assertTrue(launcher.getStatus());
LOGGER.info("Success");
} catch (AssertionError e) {
LOGGER.error("Assertion error", e);
}
}
So von oben, sehen wir, dass der Launcher-Instanz gestartet werden mit einem anderen Dateinamen, je nachdem, was in der Befehlszeile eingegeben wurde.
Das Problem ist jedoch, dass Junit ist meine anonyme Klasse nicht aktiv. Grundsätzlich wird die Hauptmethode beendet, ohne dass eine der Assertions oder der Protokollierung stattfindet. Die Methode testCase testFunc() wird daher überhaupt nicht aufgerufen.
Allerdings, wenn ich die Testcase-Instanz ändern nicht anonym sein, funktioniert das Everthing wie erwartet und der Testfall ist erfolgreich:
import org.junit.runner.JUnitCore;
public class MainClass {
public static void main(String[] args) throws Exception {
TestCase testCase = new TestCase();
JUnitCore junit = new JUnitCore();
junit.run(testCase.getClass());
}
}
Warum nur die Test-Klasse JUnit starten würde, wenn es nicht anonym ist?
Vielen Dank, das macht Sinn. Ich habe mich für einen anderen Ansatz entschieden, indem ich Java-Eigenschaften von der Befehlszeile aus verwende. – mdewit