2017-11-12 3 views
0

Ich arbeite in Eclipse Oxygen.1 (4.7.1a) mit der JUnit 5-Bibliothek, und es scheint, als ob keine meiner annotierten Methoden ordnungsgemäß ausgeführt werden, wenn ich eine Testklasse ausführen mit JUnitCore.JUnitCore.run() ignoriert @BeforeAll Annotationen

Zum Beispiel, wenn ich rufe die folgende Klasse mit JUnitCore.run(TestClass.class):

public class TestClass { 

    @BeforeAll 
    public static void beforeAll() { 
     System.out.println("In TestClass.beforeAll"); 
    } 

    @Test 
    public void testMethod() { 
     System.out.println("In TestClass.testMethod"); 
    } 

    @AfterAll 
    public static void afterAll() { 
     System.out.println("In TestClass.afterAll"); 
    } 

} 

Es gibt keine Ausgabe an System.out und das Ergebnis Objekt sagt, dass ein Test nicht bestanden. Implizieren, dass keine dieser Methoden ausgeführt wurde. Ich kann einen JUnit Launcher verwenden, um die Test-Klasse läuft wie folgt:

final LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() 
     .selectors(selectClass(TestClass.class)).build(); 
final Launcher launcher = LauncherFactory.create(); 
launcher.execute(request); 

Dies ist jedoch nicht mir nicht gibt eine Rückmeldung darüber, wie viele Tests bestanden/nicht bestanden, so scheint es nur um sie auszuführen. Ich kann nicht viel Dokumentation zur Verwendung von JUnitCore mit JUnit5 finden. Gibt es etwas Neues, mit dem ich arbeiten sollte?

Antwort

3

Sie sollten JUnitCore nicht mit JUnit 5 verwenden, sondern stattdessen die Platform Launcher-API wie im zweiten Teil der Analyse verwenden.

launcher#execute(.) gibt keinen Wert zurück, daher müssen Sie einen Listener verwenden, um die Ergebnisse aus der Ausführung Ihrer Tests zu aggregieren, wie in der JUnit 5-Dokumentation 7.1.2 Executing Tests beschrieben.

Es gibt keinen Rückgabewert für die execute() -Methode, aber Sie können problemlos einen Listener verwenden, um die Endergebnisse in einem eigenen Objekt zu aggregieren. Ein Beispiel finden Sie unter SummaryGeneratingListener.

Sie können zum Beispiel eine TestExecutionSummary erzeugen, die in der Tat Sie mit den Informationen, die Sie sammeln möchten, bieten kann:

final LauncherDiscoveryRequest request = 
    LauncherDiscoveryRequestBuilder.request() 
            .selectors(selectClass(TestClass.class)) 
            .build(); 

final Launcher launcher = LauncherFactory.create(); 
final SummaryGeneratingListener listener = new SummaryGeneratingListener(); 

launcher.registerTestExecutionListeners(listener); 
launcher.execute(request); 

TestExecutionSummary summary = listener.getSummary(); 
long testFoundCount = summary.getTestsFoundCount(); 
List<Failure> failures = summary.getFailures(); 
... 
+0

Groß danke, ich weiß nicht, wie ich das verpasst in der Dokumentation. –