JUnit - 在Suite的一部分时忽略测试

时间:2016-12-27 15:41:42

标签: junit junit4 test-suite

我正在组织一些套件测试,这很棒,但我需要忽略属于套件的测试,以便我的构建不会自动运行它们。

我可以通过从构建过程中排除它们来实现这一点,但是想看看JUnit是否原生支持它。

实现这一目标的最简洁方法是什么?

编辑: 为了在maven构建中实现这一点,我可以对测试进行分类(https://stackoverflow.com/a/14133020/819606)并排除整个类别(https://stackoverflow.com/a/18678108/819606)。

1 个答案:

答案 0 :(得分:0)

Junit4 - 您可以尝试使用

@Ignore 
public class IgnoreMe {
           @Test public void test1() { ... }
           @Test public void test2() { ... }
}

变身为 -

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@SuiteClasses( {IgnoreMe.class, AnotherIgnored.class})
@Ignore
public class MyTestSuiteClass {
....
// include BeforeClass, AfterClass etc here
}

来源 - Ignore in Junit4

Junit5 - 你可以尝试类似的东西 -

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

@Disabled
class DisabledClassDemo {
    @Test
    void testWillBeSkipped() {
    }
}

来源 - Disabling Tests in Junit5

以及Junit5中的套件实现

  

如果您有多个测试类,则可以创建测试套件   在下面的例子中可以看到。

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.runner.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectPackages("example")
@Disabled
public class JUnit4SuiteDemo {
}
  

JUnit4SuiteDemo将发现并运行示例中的所有测试   包及其子包。默认情况下,它只包含测试   名称与模式匹配的类^。*测试?$。

其中@SelectPackages指定在通过@RunWith(JUnitPlatform.class)运行测试套件时要选择的软件包的名称,因此您可以指定要执行的软件包或者您不想执行的软件包的名称并按上述标记禁用它们。

进一步阅读 - @Select in Junit5Running a Test Suite in Junit5