临时目录为空

pee*_*eer 6 java junit junit5

我想将一些文件复制到临时目录中。但File我注释的@TempDir似乎没有被注入。

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

import java.io.File;

public class MyTempFileTest {

    @TempDir
    public File tempFolder;
    
    @Test
    public void testTempFolder() {
        Assertions.assertNotNull(tempFolder); 
    }
 }
Run Code Online (Sandbox Code Playgroud)

结果是org.opentest4j.AssertionFailedError: expected: not <null>

相反,我希望它是一个随机临时目录,就像@Rule TemporaryFolder tmpSudokus = new TemporaryFolder()Junit4 中的情况一样。

根据文档我可以注释一个Java.io.File.

如果我尝试将 tempDir 作为目录传递

    @Test
    public void testTempFolderParam(@TempDir File tempFolder) {
        Assertions.assertNotNull(tempFolder);
    }
Run Code Online (Sandbox Code Playgroud)

我明白了org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [java.io.File tempFolder] in executable [public void my.package.MyTempFileTest.testTempFolderParam(java.io.File)].

该测试是 android 项目的一部分,我的依赖项是:

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2'
    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.2'
}
Run Code Online (Sandbox Code Playgroud)

小智 2

根据文档Junit5 Docs

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

正如我在您的示例中看到的,您确实使用了 java.io.File,所以我猜您的问题出在临时文件夹的创建部分。

我复制了你的示例,它确实有效,tempDir 不为空

在此输入图像描述

依赖关系:

  • junit-木星:5.7.2
  • junit-jupiter-engine:5.7.2
  • junit-jupiter-params:5.7.2