我正在尝试使用JUnitCore.runClasses(),我可以使用以下代码运行它
JUnitCore.runClasses(testClass.class);
但我很好奇,因为runClasses()可以使用任意数量的参数,是否可以使用类似以下的代码?
Class c = testClass.class;
JUnitCore.runClasses(c);
或
List<Class> c = new ArrayList<>{test1.class, test2.class, test3.class};
JUnitCore.runClasses(c);
我问这就好像你试图将java.io.File类型传递给JUnitCore.runClasses()而得到以下错误
no suitable method found for runClasses(java.io.File)
method org.junit.runner.JUnitCore.runClasses(java.lang.Class<?>...) is not applicable
(argument type java.io.File does not conform to vararg element type java.lang.Class<?>)
method org.junit.runner.JUnitCore.runClasses(org.junit.runner.Computer,java.lang.Class<?>...) is not applicable
(actual argument java.io.File cannot be converted to org.junit.runner.Computer by method invocation conversion)
答案 0 :(得分:2)
我假设您正在尝试执行以下操作:
您有一个包含要使用JUnitCore运行的java类的文件。
要完成此任务,您必须:
代码示例:
File file = new File("path to your file");
File dir = file.getParentFile();
URL url = new URL("file://" + dir.getAbsolutePath());
URLClassLoader classLoader = new URLClassLoader(new URL[]{url});
Class<?> clazz = classLoader.findClass("ClassName");
JUnitCore.runClasses(clazz);
该示例仅在类没有包时才有效。您可以编写自己的类加载器来控制类加载过程。请参阅javadoc for URLClassLoader以了解此类加载器的工作原理。要编写自定义类加载器,您可以咨询this。
答案 1 :(得分:0)
您还可以创建一个包含所有TestClass的TestSuite类。然后你可以通过
来调用它JunitCore.runClasses(TestSuite.class);
TestSuite类包含TestClass的列表,例如
@RunWith(Suite.class)
@Suite.SuiteClasses({
Test1.class,
Test2.class
})