停止@Before方法中的 JUnit 测试而不会失败

2022-09-03 14:08:48

这些是我的测试用例

class Mother {

    @Before
    public void setUp() {
        if (!this.getClass().isAnnotatedWith("Version20")) { // pseudo code
            /*
             * stop this test without failing!
             */
        }

        // further setup
    }
}


@Version20
class Child extends Mother {

    @Test
    public void test() {
        // run only when Version == 20
    }
}

有没有可能以母亲@Before方法停止儿童测试而不失败或断言True(false)?

编辑:我有更多的版本@Version19,@Version18等,我的软件正在读取配置文件并输出结果,一些测试仅适用于特殊版本。我不想在测试方法中进行版本检查,因为我有很多小测试,不喜欢代码重复


答案 1

我之前问过一个类似的问题 - 结果是你可以使用类的方法基于运行时检查禁用测试(而是静态条件)。Assume@Ignore

也就是说,如果您始终根据特定的注释禁用它们,则似乎实际上不需要在运行时执行此操作。简单地用“以及”以及“来注释类,就可以完成这项工作,并且可以说会更清晰。@Ignore@Version20

虽然我怀疑你可能只忽略测试在“1.0模式”下运行时 - 在这种情况下,它是运行时内省,你可以用这样的东西来做到这一点:

@Before
public void setUp() {
   if (!this.getClass().isAnnotatedWith("Version20")) {
      final String version = System.getProperty("my.app.test.version");
      org.junit.Assume.assumeTrue(version.equals("2.0"));
   }
}

答案 2

推荐