小编典典

有条件地忽略 JUnit 4 中的测试

all

好的,所以@Ignore注释有助于标记不应运行测试用例。

但是,有时我想忽略基于运行时信息的测试。例如,如果我有一个并发测试需要在具有一定数量内核的机器上运行。如果这个测试是在单处理器机器上运行的,我认为只通过测试是不正确的(因为它还没有运行),而且测试失败并破坏构建肯定是不对的.

所以我希望能够在运行时忽略测试,因为这似乎是正确的结果(因为测试框架将允许构建通过但记录测试未运行)。我相当确定注释不会给我这种灵活性,并且怀疑我需要为相关类手动创建测试套件。但是,文档没有提到任何关于此的内容,并且通过API也不清楚这将如何以编程方式完成(即,我如何以编程方式创建与注释创建的实例Test或类似实例?)。@Ignore

如果有人过去做过类似的事情,或者对我还能如何解决这个问题有一个好主意,我会很高兴听到这个消息。


阅读 113

收藏
2022-03-23

共1个答案

小编典典

JUnit 方法是在运行时执行此操作是org.junit.Assume.

 @Before
 public void beforeMethod() {
     org.junit.Assume.assumeTrue(someCondition());
     // rest of setup.
 }

您可以在@Before方法或测试本身中执行此操作,但不能在@After方法中执行。如果您在测试本身中执行此操作,您的@Before方法将运行。您也可以在内部执行此操作@BeforeClass以防止类初始化。

假设失败会导致测试被忽略。

编辑: 为了与来自 junit-ext@RunIf的注释进行比较,他们的示例代码如下所示: __

@Test
public void calculateTotalSalary() {
    assumeThat(Database.connect(), is(notNull()));
    //test code below.
}

更不用说以Database.connect()这种方式从方法中捕获和使用连接要容易得多。

2022-03-23