0

我正在尝试使用 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)
4

2 回答 2

2

我假设您正在尝试执行以下操作:

您有一个包含要使用 JUnitCore 运行的 java 类的文件。

要完成此任务,您必须:

  1. 加载类,这可以通过使用自定义类加载器来完成。更好的方法是将类包含到您的应用程序中
  2. 现在您可以调用 JUnitCore.runClasses(loadedClass);

代码示例:

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);

该示例仅在该类没有包时才有效。您可以编写自己的类加载器来控制类加载过程。请参阅URLClassLoader 的 javadoc以了解此类加载器的工作原理。要编写自定义类加载器,您可以参考这个

于 2012-08-15T11:35:16.023 回答
0

您还可以创建一个包含所有 TestClass 的 TestSuite 类。然后你可以调用它

JunitCore.runClasses(TestSuite.class);

TestSuite 类包含您的 TestClass 的列表,例如

@RunWith(Suite.class)
@Suite.SuiteClasses({
    Test1.class,
    Test2.class
})
于 2014-09-03T14:59:43.017 回答