在JUnit中,您可以像这样创建测试套件:
public class SecurityTest1 {
@Test
public void testSecurity1() {
// ...
}
}
public class LoadTest1 {
@Test
public void testLoad1() {
// ...
}
}
public class SecurityTest2 {
@Test
public void testSecurity2() {
// ...
}
}
@RunWith(Suite.class)
@SuiteClasses({SecurityTest1.class, SecurityTest2.class})
public class SecurityTestSuite {}
但这看起来相当麻烦。定义一个简单的类级注释会非常好:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SecurityTest {}
然后像这样定义你的套件:
@SecurityTest
public class SecurityTest1 {
@Test
public void testSecurity1() {
// ...
}
}
public class LoadTest1 {
@Test
public void testLoad1() {
// ...
}
}
@SecurityTest
public class SecurityTest2 {
@Test
public void testSecurity2() {
// ...
}
}
@RunWith(Suite.class)
@SuiteClasses({SecurityTest.class})
public class SecurityTestSuite {}
这可能吗?如果是这样的话? 注意:如果JUnit不支持,请不要切换到TestNG或任何其他测试框架...提前感谢!
答案 0 :(得分:1)
您可以通过实施与Test Runner跑步者类似的Suite来实现此目的。
此跑步者应该从@SuiteClasses
注释的值中提取标记注释类(您应该用自己的注释替换@SuiteClasses
)。请查看getAnnotatedClasses
类的org.junit.runners.Suite
方法
在具有标记注释类之后,您应该扫描类路径以查找使用此注释标记的测试类(使用诸如Reflections之类的库)并将它们的数组传递给相应的Runner构造函数。
您可以在Suite
构造函数中找到类似的行为:
public Suite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
}