在Junit 4中,我们使用如下所述的注释添加测试套件:
@RunWith(Suite.class)
@SuiteClasses({
A.class, B.class })
public class MyTestsuite
{
}
我的查询是,我们有没有办法指定条件来决定我想要在@SuiteClasses中包含哪些类。例如;让我们在上面的代码中说,如果我想要A类,如果某个特定条件为真,否则我不想将它添加到@SuiteClasses。
在junit 3.8中,我们使用如下所述的suite()方法来完成它:
public class MyTestsuite extends TestCase
{
public static Test suite()
{
TestSuite suite = new TestSuite();
if(some_condition_true)
{
suite.addTest(A.suite);
}
suite.addTest(B.suite);
return suite;
}
}
我们有什么方法可以使用junit 4来实现这个目标吗?
答案 0 :(得分:2)
扩展套件:
@RunWith(MySuite.class)//Customized
@SuiteClasses({
A.class, B.class })
public class MyTestsuite
{}
定义MySuite:
public class MySuite extends Suite {
public MySuite(Class<?> klass, RunnerBuilder builder)
throws InitializationError {
super(klass, builder);
try {
filter(new Filter() {
@Override public boolean shouldRun(Description description) {
return some_condition_true? true : false;
}
@Override
public String describe() {
return "...";
}
});
} catch (NoTestsRemainException e) {
System.out.println("Hey, all test cases are not satisfied your condition.");
}
}
}
加:虽然它可以工作,但我建议保持测试用例简单。很难保持复杂的事情。
答案 1 :(得分:0)
另一个选择是始终添加测试类,但在类中有一个assumeTrue(condition),它将决定它应该何时运行以及什么时候没有意义。
(当条件与测试先决条件相关时,我更喜欢这种方法:测试本身是知道它是否应该运行的最佳位置。)