是否可以将java.io.FIle传递给JUnitCore.runClasses()

时间:2012-08-15 11:08:39

标签: java junit

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

2 个答案:

答案 0 :(得分:2)

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

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

要完成此任务,您必须:

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

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