How to programmatically execute a test suite using JUnit4?

automated-tests, junit, junit4, test-suite

Solution

Just specify the name of the suite class to JUnitCore:

Computer computer = new Computer();

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

Problem

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.

Original source