2012-04-12 7 views
9

Ich versuche, eine JUnit Testsuite über die API aufzurufen. Ich weiß, dass Sie Klassen-Test-Suite können mit dem folgenden:Wie programmgesteuert eine Testsuite mit JUnit4 ausführen?

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    Test1.class, 
    Test2.class, ... 
}) 

Aber ist es eine Möglichkeit, die gesamte Suite mit dem Java-API, mit JUnitCore beispielsweise auszulösen?

Zum Beispiel können Sie einen Test auslösen, indem Sie den folgenden Code verwenden:

Runner r = 
try { 
    r = new BlockJUnit4ClassRunner(Class.forName(testClass)); 
} catch (ClassNotFoundException | InitializationError e) { 
    // handle 
} 
JUnitCore c = new JUnitCore(); 
c.run(Request.runner(r)); 

Update:

Von der API, so scheint es, dass die Suite Klasse selbst ein Läufer ist, daher die folgender Code scheint zu funktionieren:

Suite suite = new Suite(klass, new RunnerBuilder() { 
... // Implement methods 
}); 
JUnitCore c = new JUnitCore(); 
c.run(Request.runner(suite)); 

Aber ich bin nicht sicher, ob dies ein empfohlene Ansatz ist oder wenn es irgendein Nachteil Schreiben t er über Code.

Antwort

12

Geben Sie einfach den Namen der Suite Klasse JUnitCore:

Computer computer = new Computer(); 

JUnitCore jUnitCore = new JUnitCore(); 
jUnitCore.run(computer, MySuite.class); 
+0

Danke Matthew! Ich werde es auf jeden Fall versuchen. Haben Sie in der Zwischenzeit Empfehlungen für das Code-Snippet in meinem Update? – Neel

4

können Sie auch, dass mit Eingabeaufforderung als

java org.junit.runner.JUnitCore Testklassenname

+5

Ich denke nicht, dass dies als "programmatisch" qualifiziert. – oers

+1

Es wird, wenn Sie es mit Laufzeit.exec –

+2

oder JunitCore.main (testClassName) aufrufen –

Verwandte Themen