如何在junit4的@SuiteClasses中指定要添加的类
在Junit 4中,我们使用注释添加测试套件,如下所述:如何在junit4的@SuiteClasses中指定要添加的类,junit,junit4,Junit,Junit4,在Junit 4中,我们使用注释添加测试套件,如下所述: @RunWith(Suite.class) @SuiteClasses({ A.class, B.class }) public class MyTestsuite { } public class MyTestsuite extends TestCase { public static Test suite() { TestSuite suite = new TestSuite(); if(some_con
@RunWith(Suite.class)
@SuiteClasses({
A.class, B.class })
public class MyTestsuite
{
}
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;
}
}
我的问题是,我们是否有办法指定条件来决定我想在@SuiteClasses中包含哪些类。例如在上面的代码中,如果我想在某个特定条件为真的情况下使用类A,否则我不想将其添加到@SuiteClasses
在junit 3.8中,我们使用如下所述的suite()方法进行此操作:
@RunWith(Suite.class)
@SuiteClasses({
A.class, B.class })
public class MyTestsuite
{
}
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有什么方法可以实现这一点吗?扩展套件:
@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.");
}
}
}
公共类MySuite扩展套件{
公共MySuite(类klass、RunnerBuilder)
抛出初始化错误{
超级(克拉斯,建筑商);
试一试{
过滤器(新过滤器(){
@重写公共布尔值shouldlrun(说明){
返回某个条件为真?真:假;
}
@凌驾
公共字符串descripe(){
返回“…”;
}
});
}捕获(notestsremaine异常){
System.out.println(“嘿,所有测试用例都不满足您的条件。”);
}
}
}
另外:虽然它可以工作,但我建议保持测试用例的简单。维护复杂的东西是很困难的。生源的答案会有用的 另一个选项是始终添加测试类,但在类中有一个assumeTrue(条件),它将决定何时应该运行以及何时没有意义
(当条件与测试先决条件相关时,我更喜欢这种方法:测试本身是知道它是否应该运行的最佳场所)。例如,如果处理A.class和B.class,如何将值传递给MySuite以检查它?