【发布时间】: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 子项目中运行单个测试类,我将更新我的问题。我假设我正在运行我的依赖项中指定的 JUnit5.7.2,并且我没有明确指定运行器,所以我假设它的版本是相同的。我不知道如何找出版本。 -
对我来说也一样,tempFolder 为 null ...使用 junit-jupiter-api v5.7.2,但使用
@TempDir static Path tempFolder;而不是 File