如何要求 JUnit 测试实现 @BeforeClass/@AfterClass "abstract method"?

How to require that JUnit tests implement a @BeforeClass/@AfterClass "abstract method"?

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

但在 JUnit 中,它们是。

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

我正在为 java.nio.file.Path 编写断言,准确地说是 assertj, which uses JUnit 4.x for tests. Some assertions require that I initialize a FileSystem (a memoryfs)来测试它们;理想情况下,这样的文件系统应该在测试 class 级别而不是每次测试时初始化。根据测试 class,我需要以不同方式初始化该文件系统的内容。

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

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

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

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

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

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

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

可以通过将资源设为匿名内部 class 和 覆盖方法,或将参数传递给其构造函数。

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