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

Abs*_*ind 14 java junit

这些是我的测试用例

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
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以在母亲的@Before方法中停止测试而不会失败或断言(假)?

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

And*_*yle 18

我之前问了一个类似的问题 - 结果是你可以使用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"));
   }
}
Run Code Online (Sandbox Code Playgroud)