How to programmatically execute a test suite using JUnit4?
Asked Answered
D

2

10

I am trying to invoke a JUnit Test suite using the API. I know that you can suite up test classes using the following:

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

But, is there a way to trigger the entire suite using the Java API, using JUnitCore for example?

For example, you can trigger a test by using the following code:

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

Update:

From the API, it seems that the Suite class itself is a runner, hence the following code seems to work:

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

But I am not sure if this is a recommended approach or if there is any downside to writing the above code.

Delinquent answered 12/4, 2012 at 15:42 Comment(0)
M
14

Just specify the name of the suite class to JUnitCore:

Computer computer = new Computer();

JUnitCore jUnitCore = new JUnitCore();
jUnitCore.run(computer, MySuite.class);
Monocarpic answered 12/4, 2012 at 18:41 Comment(1)
Thanks Matthew! I will definitely give this a try. In the meantime, do you have recommendations for the code snippet in my update?Delinquent
H
4

You can also that using command prompt as

java org.junit.runner.JUnitCore test class name

Hurtless answered 13/4, 2012 at 9:1 Comment(2)
I don't think that this qualifies as "programmatically".Gerbil
It will if you call it using runtime.execHurtless

© 2022 - 2024 — McMap. All rights reserved.