带有静态类列表的Junit SuiteClasses

时间:2009-07-01 16:48:28

标签: java junit4

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

2 个答案:

答案 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, ...);