如何要求 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 规则。
作为 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 规则。