繁体   English   中英

如何摆脱 Junit5 中的 TemporaryFolder 规则

[英]How to get rid of TemporaryFolder rule in Junit5

我正在将单元测试从 Junit4 迁移到 Junit5。 在测试中,我使用来自 Junit4 API 的TemporaryFolder 规则 为了保持测试正常工作,我添加了@EnableRuleMigrationSupport注释:

@EnableRuleMigrationSupport
public final class SomeTest {

    @Rule
    public final TemporaryFolder tmp = new TemporaryFolder();

   // tests ...
}

据我了解,在 Junit5 中我需要使用extensions而不是rules ,但在 Junit5 扩展中我找不到任何替代TemporaryFolder的东西。 它存在吗? 如何正确用扩展名替换TemporaryFolder规则?

您可以使用JUnit 5 用户指南的 §2.20.1 中描述的@TempDir注释 (JUnit 5.4+)。 从用户指南(强调我的):

内置的TempDirectory扩展用于为单个测试或测试类中的所有测试创建和清理临时目录。 默认情况下已注册。 要使用它,请使用@TempDir注释java.nio.file.Pathjava.io.File类型的非私有字段,或添加使用@TempDir注释的java.nio.file.Pathjava.io.File类型的参数@TempDir到生命周期方法或测试方法。

注意:此扩展是在5.4版中添加的,目前(从5.8.2开始)是实验性的。

使用实例字段的示例:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File

class SomeTests {

    @TempDir
    Path directory; // may be private since 5.8

}

允许 @TempDir 字段为私有 #2687

使用测试方法参数的示例:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File

class SomeTests {

    @Test
    void testFoo(@TempDir Path directory) {
        // do test...
    }

}

注意:不支持构造函数参数。

@TempDir的 Javadoc 中描述了创建和删除目录的时间(来自 JUnit 5.8.2 的文档引用):

创建

仅当测试类中的字段或生命周期方法或测试方法中的参数使用@TempDir注释时,才会创建临时目录。 如果字段类型或参数类型既不是Path也不是File ,或者如果无法创建临时目录,则会酌情抛出ExtensionConfigurationExceptionParameterResolutionException 此外,对于使用@TempDir注释的构造函数参数,将引发ParameterResolutionException

范围

默认情况下,为@TempDir注释的每个声明创建一个单独的临时目录。 如果要在测试类中的所有测试之间共享临时目录,则应在static字段或@BeforeAll方法的参数上声明注释。

旧行为

您可以通过将junit.jupiter.tempdir.scope配置参数设置为per_context来恢复使用单个临时目录的旧行为。 在这种情况下,临时目录的范围取决于在执行测试类时遇到第一个@TempDir注释的位置。 当注释出现在static字段或@BeforeAll方法的参数上时,临时目录将由类中的所有测试共享。 否则——例如,当@TempDir仅用于实例字段或 test、 @BeforeEach@AfterEach方法中的参数时——每个测试将使用自己的临时目录。

删除

当到达临时目录范围的末尾时,即当测试方法或类完成执行时,JUnit 将尝试递归删除临时目录中的所有文件和目录,最后是临时目录本身。 如果删除文件或目录失败,将抛出IOException导致测试或测试类失败。

暂无
暂无

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

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