【问题标题】:TempDir is nullTempDir 为空
【发布时间】:2021-06-26 14:37:06
【问题描述】:

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

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); 
    }
 }

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

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

根据docs,我可以注释Java.io.File

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

    @Test
    public void testTempFolderParam(@TempDir File tempFolder) {
        Assertions.assertNotNull(tempFolder);
    }

我收到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'
}

【问题讨论】:

  • 您究竟是如何运行您的 JUnit 测试用例的?您使用的是哪个确切版本的 JUnit(及其运行程序?)?
  • @Progman 我通过右键单击 Android Studio 的 project 侧边栏中的类来运行测试。一旦我弄清楚如何在 gradle 子项目中运行单个测试类,我将更新我的问题。我假设我正在运行我的依赖项中指定的 JUnit 5.7.2,并且我没有明确指定运行器,所以我假设它的版本是相同的。我不知道如何找出版本。
  • 对我来说也一样,tempFolder 为 null ...使用 junit-jupiter-api v5.7.2,但使用 @TempDir static Path tempFolder; 而不是 File

标签: java junit junit5


【解决方案1】:

根据文档Junit5 Docs

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

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

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

依赖关系:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2018-11-09
    • 2019-12-18
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多