如何在junit4中指定要在@SuiteClasses中添加的类

时间:2012-05-16 10:52:25

标签: junit junit4

在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来实现这个目标吗?

2 个答案:

答案 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),它将决定它应该何时运行以及什么时候没有意义。

(当条件与测试先决条件相关时,我更喜欢这种方法:测试本身是知道它是否应该运行的最佳位置。)

相关问题