1

在 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 或任何其他测试框架不感兴趣......提前致谢!

4

1 回答 1

1

您可以通过实现类似于Suite runner 的自己的Test Runner来做到这一点。

此运行器应从注释的值中提取标记注释类@SuiteClasses(您可能应该@SuiteClasses用自己的注释替换)。看一下类的getAnnotatedClasses方法org.junit.runners.Suite
拥有标记注解类后,您应该扫描类路径以查找使用此注解标记的测试类(使用诸如Reflections之类的库)并将它们的数组传递给适当的 Runner 构造函数。
您可以在构造函数中找到类似的行为Suite

public Suite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
   this(builder, klass, getAnnotatedClasses(klass));
} 
于 2013-09-12T20:24:03.673 回答