Java JUnit测试套件是否支持自定义注释?
在JUnit中,您可以创建如下测试套件:Java JUnit测试套件是否支持自定义注释?,java,reflection,junit,annotations,test-suite,Java,Reflection,Junit,Annotations,Test Suite,在JUnit中,您可以创建如下测试套件: public class SecurityTest1 { @Test public void testSecurity1() { // ... } } public class LoadTest1 { @Test public void testLoad1() { // ... } } public class SecurityTest2 { @Test
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或任何其他测试框架不感兴趣…提前感谢 您可以通过实现自己的类似于runner的功能来实现 此运行程序应该从
@SuiteClasses
注释的值中提取标记注释类(您可能应该用自己的注释替换@SuiteClasses
)。查看org.junit.runners.Suite
类的getAnnotatedClass
方法。拥有marker annotation类后,您应该扫描类路径以查找标记有此注释的测试类(使用库,例如),并将它们的数组传递给相应的运行器构造函数。
您可以在
套件
构造函数中找到类似的行为:
public Suite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
}
public套件(类klass,RunnerBuilder)引发初始化错误{
这(建筑商、klass、GetAnnotatedClass(klass));
}
您可以通过实现自己的类似于runner的功能来实现
此运行程序应该从@SuiteClasses
注释的值中提取标记注释类(您可能应该用自己的注释替换@SuiteClasses
)。查看org.junit.runners.Suite
类的getAnnotatedClass
方法。拥有marker annotation类后,您应该扫描类路径以查找标记有此注释的测试类(使用库,例如),并将它们的数组传递给相应的运行器构造函数。
您可以在
套件
构造函数中找到类似的行为:
public Suite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
}
public套件(类klass,RunnerBuilder)引发初始化错误{
这(建筑商、klass、GetAnnotatedClass(klass));
}
研究实现您自己的BlockJUnit4ClassRunner
。研究实现您自己的BlockJUnit4ClassRunner
。