如何要求JUnit测试实现@ BeforeClass / @ AfterClass“抽象方法”?

时间:2015-01-01 09:21:33

标签: java junit testng

作为一个沉重的TestNG用户,这不是问题,因为@{Before,After}Class方法不是static ...

但是在JUnit中,他们是。

这对我目前正在做的事情来说是一个很大的问题。

我正在为assertj编写java.nio.file.Path的断言,它使用JUnit 4.x进行测试。有些断言要求我初始化FileSystem(准确地说是memoryfs)来测试它们;理想情况下,这样的文件系统应该在测试类级别初始化,而不是每次测试。根据测试类,我需要以不同方式初始化该文件系统的内容。

现在,我使用@Before / @After,因为我不知道更好......

同样,使用TestNG,不是问题,因为@{Before,After}Class不是静态的。那么,你如何使用JUnit做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以为初始化创建规则类:

public class Resource extends ExternalResource {
    protected void before() {
        // ...
    }

    protected void after() {
        // ...
    }
}

然后在每个测试中引用它:

@ClassRule public static Resource resource = new Resource();

任何按测试自定义都可以通过使资源成为匿名内部类来完成 重写方法,或将参数传递给它的构造函数。

如果您有一个公共基类,可以将resource放在那里,然后只在需要自定义它的子类中声明它。在junit中,子类中的类规则将覆盖具有相同名称的父类中的类规则。