Java Junit SuiteClass具有静态类列表

Java Junit SuiteClass具有静态类列表,java,junit4,Java,Junit4,SuiteClasses可以很好地处理类列表,比如{Test1.class,Test2.class},但是当我尝试生成静态类列表时,它会显示不兼容的类型:requiredjava.lang.class但是findjava.lang.class[] 我错过了什么 @RunWith(Suite.class) @Suite.SuiteClasses(TestSuite.classes) public class TestSuite { public static Class<?>

SuiteClasses可以很好地处理类列表,比如
{Test1.class,Test2.class}
,但是当我尝试生成静态类列表时,它会显示不兼容的类型:required
java.lang.class
但是find
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;
    }
}
@RunWith(Suite.class)
@Suite.SuiteClasses(TestSuite.classes)
公共类测试套件{
公共静态类[]类;
静止的{
类别=新类别[1];
类别[0]=MyTest.class;
}
}

这不应该真正起作用。您打算将数组作为常量放在注释中。即使您解决了这个问题,编译器也会拒绝它。您需要做的是:

@RunWith(Suite.class)

@Suite.SuiteClasses({MyTest.class, MyOtherTest.class})
public static class TestSuite {
}
请注意弯曲的括号

我确信您想要得到的是能够动态地构建套件中的类列表

我向他们提交了一份允许这样做的报告,但与此同时,唯一的方法是对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.
   }
}
公共类动态套件扩展套件{
公共DynamicSuite(类setupClass)引发初始化错误{
super(setupClass,DynamicSuiteBuilder.suite());
}
}
@RunWith(DynamicSuite.class)
公共类DynamicSuiteBuilder{
公共静态类[]套件(){
//在这里生成类数组。
}
}

@SuiteClasses
是JUnit 4.4中定义的类注释,位于org.JUnit.runners.SuiteClasses中。它允许您定义上一个问题中描述的套件类

顺便说一句,JUnit4.4的API文档对org.JUnit.runners.Suite类(Suite.html)有一个主要的输入错误

将套件用作运行程序允许您手动构建包含来自多个类的测试的套件。它是JUnit4与JUnit3.8.x静态测试的等价物
suite()
方法。要使用它,请使用
@RunWith(Suite.class)
@SuiteClasses(TestClass1.class,…)
注释类。运行此类时,它将运行所有套件类中的所有测试

@SuiteClasses(TestClass1.class,…)
应更改为
@Suite.SuiteClasses({TestClass1.class,…})

有人在JUnit4.4中提供了关于构建测试套件的错误信息。不要这样做:

JUnit提供了定义要运行的套件和显示其结果的工具。要在控制台上运行测试并查看结果,请运行:

org.junit.runner.TextListener.run(TestClass1.class, ...);

在和[]之间确实有空格吗?如果是这样的话,请删除该空格。空格没有任何意义,这是因为他试图将数组放置在它不属于的位置(即使实际上类名被列为{M1.class,M2.class})。子类化
Suite
对我帮助很大。与使用
@RunWith(AllTests.class)
runner不同,这种方法还尊重套件本身的
@ClassRule
s及其包含的类。我尝试了这种方法来实现安装和拆卸。但是DynamicSuite构造函数在@beforeclass之前被调用。有没有办法在构造函数之前调用@beforeclass。