作为一个沉重的TestNG用户,这不是问题,因为@{Before,After}Class
方法不是static
...
但是在JUnit中,他们是。
这对我目前正在做的事情来说是一个很大的问题。
我正在为assertj编写java.nio.file.Path的断言,它使用JUnit 4.x进行测试。有些断言要求我初始化FileSystem
(准确地说是memoryfs)来测试它们;理想情况下,这样的文件系统应该在测试类级别初始化,而不是每次测试。根据测试类,我需要以不同方式初始化该文件系统的内容。
现在,我使用@Before
/ @After
,因为我不知道更好......
同样,使用TestNG,不是问题,因为@{Before,After}Class
不是静态的。那么,你如何使用JUnit做到这一点?
答案 0 :(得分:3)
您可以为初始化创建规则类:
public class Resource extends ExternalResource {
protected void before() {
// ...
}
protected void after() {
// ...
}
}
然后在每个测试中引用它:
@ClassRule public static Resource resource = new Resource();
任何按测试自定义都可以通过使资源成为匿名内部类来完成 重写方法,或将参数传递给它的构造函数。
如果您有一个公共基类,可以将resource
放在那里,然后只在需要自定义它的子类中声明它。在junit中,子类中的类规则将覆盖具有相同名称的父类中的类规则。