3

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

4

2 回答 2

3

扩展套件:

@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.");
                }
            }
        }

加:虽然它可以工作,但我建议保持测试用例简单。很难维护复杂的东西。

于 2012-05-18T02:12:15.653 回答
0

盛远回答会奏效。

另一种选择是始终添加测试类,但在您的类中有一个假设真(条件),它将决定何时应该运行以及何时没有意义。

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

于 2012-05-18T02:47:46.920 回答