SuiteClasses可以很好地使用{Test1.class,Test2.class}
这样的类列表,但是当我尝试生成类的静态列表时,它表示不兼容的类型:必需java.lang.Class<?>
但找到了java.lang.Class<?>[]
我错过了什么?
@RunWith(Suite.class)
@Suite.SuiteClasses(TestSuite.classes)
public class TestSuite {
public static Class<?> [] classes;
static {
classes = new Class<?> [1];
classes[0] = MyTest.class;
}
}
答案 0 :(得分:21)
那不应该真的有用。您打算将注释中的数组作为常量。即使你遇到了这个问题,编译器也会拒绝它。你需要做的是:
@RunWith(Suite.class)
@Suite.SuiteClasses({MyTest.class, MyOtherTest.class})
public static class TestSuite {
}
注意弯曲的括号。
我确定你想要的是能够动态地在套件中构建类列表。
我向他们提交了request以允许这样做,但与此同时,唯一的方法就是像这样继承Suite类:
public class DynamicSuite extends Suite {
public DynamicSuite(Class<?> setupClass) throws InitializationError {
super(setupClass, DynamicSuiteBuilder.suite());
}
}
@RunWith(DynamicSuite.class)
public class DynamicSuiteBuilder {
public static Class[] suite() {
//Generate class array here.
}
}
答案 1 :(得分:1)
@SuiteClasses
是org.junit.runners.Suite.SuiteClasses中JUnit 4.4中定义的类注释。它允许您定义套件类,如上一个问题中所述。
顺便说一句,JUnit 4.4的API文档对org.junit.runners.Suite类(Suite.html)有一个重大错误。
使用Suite作为跑步者,您可以手动构建包含许多类测试的套件。它是JUnit 4等效的JUnit 3.8.x静态测试suite()
方法。要使用它,请使用@RunWith(Suite.class)
和@SuiteClasses(TestClass1.class, ...)
注释一个类。当您运行此类时,它将运行所有套件类中的所有测试。
@SuiteClasses(TestClass1.class, ...)
应更改为@Suite.SuiteClasses({TestClass1.class, ...})
。
有人在JUnit 4.4中提供了有关构建测试套件的错误信息。不要这样做:
JUnit提供了用于定义要运行的套件并显示其结果的工具。要运行测试并在控制台上查看结果,请运行:
org.junit.runner.TextListener.run(TestClass1.class, ...);