繁体   English   中英

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

[英]How to require that JUnit tests implement a @BeforeClass/@AfterClass “abstract method”?

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

但是在JUnit中,他们是。

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM