JUnit 5中的ExternalResource和TemporaryFolder的等价物是什么?

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

如上所述,JUnit Jupiter本身不支持也不支持JUnit 4规则。 然而,JUnit团队意识到许多组织,特别是大型组织,可能拥有大型JUnit 4代码库,包括自定义规则。 为了服务这些组织并实现渐进式迁移路径,JUnit团队决定在JUnit Jupiter中逐字支持一系列JUnit 4规则。

该指南继续说其中一个规则是ExternalResource ,它是TemporaryFolder的父级。

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

该文档仍在制作中 – 请参阅pull请求#660 。

有关JUnit5的TemporaryFolderExtension作者的有趣文章

他在github上的代码回购

JUnit5.0.0现在已经发布了,所以我们希望他们把注意力转向让实验性的东西准备就绪。

同时,似乎TemporaryFolder规则仍然适用于JUnit5 文档

用这个:

@EnableRuleMigrationSupport public class MyJUnit5Test { 

和这个:

  org.junit.jupiter junit-jupiter-migrationsupport 5.0.0  

据我所知,从ExternalResource到JUnit5中的等价物没有一对一的映射。 这些概念不合适。 在JUnit4中, ExternalResource基本上为您提供了一个before回调,但在规则中,您无法控制实际before含义。 您可以将它与@Rule@ClassRule一起@ClassRule

在JUnit5中,扩展被定义为挂钩特定的扩展点 ,因此’when’被很好地定义。

概念的另一个区别是,您可以在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); }