JUnit 5 中的 ExternalResource 和 TemporaryFolder 等效项是什么?

2022-09-02 13:04:15

根据 JUnit 5 用户指南,JUnit Jupiter 为某些 JUnit 4 规则提供了向后兼容性,以协助迁移。

如上所述,JUnit Jupiter本身不支持也不会支持JUnit 4规则。但是,JUnit 团队意识到,许多组织(尤其是大型组织)可能具有包含自定义规则的大型 JUnit 4 代码库。为了服务这些组织并实现渐进的迁移路径,JUnit团队决定在JUnit Jupiter中逐字支持JUnit 4规则的选择。

该指南接着说,其中一个规则是ExitromerResource,它是TemperalFolder的父级。

但是,不幸的是,该指南没有继续说明迁移路径是什么,或者对于那些编写新的JUnit 5测试的人来说,等效路径是什么。那么我们应该使用什么呢?


答案 1

JUnit5 的 TemporaryFolderExtension 作者的有趣文章

他在github上的代码存储库

JUnit5.0.0现在已经正式发布,所以希望他们把注意力转向让实验性的东西做好生产准备。

同时,临时文件夹规则似乎仍适用于 JUnit5 文档。

使用这个:

@EnableRuleMigrationSupport
public class MyJUnit5Test {

和这个:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-migrationsupport</artifactId>
    <version>5.0.0</version>
</dependency>

答案 2

据我所知,在JUnit5中不可能有一对一映射到等效项。这些概念根本不合适。在 JUnit4 中,基本上会给你一个和一个回调,但在规则中,你无法控制什么和实际意味着什么。您可以将其与 一起使用,也可以与 一起使用。ExternalResourceExternalResourcebeforeafterbeforeafter@Rule@ClassRule

在 JUnit5 中,扩展被定义为挂接特定的扩展点,因此“何时”被很好地定义。

概念的另一个区别是,您可以在 JUnit4 规则中具有状态,但 JUnit5 扩展不应具有任何状态。相反,所有状态都应转到执行上下文

尽管如此,这是我附带的一个选项,其中与每种测试方法相关:beforeafter

public abstract class ExternalResourceExtension 
  implements BeforeTestExecutionCallback, AfterTestExecutionCallback {
    @Override
    public void beforeTestExecution(ExtensionContext context) throws Exception {
        before(context);
    }

    @Override
    public void afterTestExecution(ExtensionContext context) throws Exception {
        after(context);
    }

    protected abstract void before(ExtensionContext context);

    protected abstract void after(ExtensionContext context);
}

推荐