Bre*_*yan 59 java junit4 maven
我编写了一个单元测试,将文件写入文件系统,没有路径写入工作目录; 因此,如果从项目目录执行,则它在项目根目录中写入,如果在项目父目录中,则写入父目录根目录.
那么写入目标目录的正确方法是什么?很可能是目标目录中的目录?
如果我只是简单地指定target/
文件,它将写入父项目目标而不是项目目标.
更新:测试结束后我确实想要文件.该文件用于需要发送给第三方的第三方提取格式.可以打开/关闭测试以允许我仅在文件格式更改以便重新批准时才运行.这个文件不是一个大问题,但我想要一些容易找到的东西.
mab*_*aba 70
你可以尝试使用TemporaryFolder JUnit的@rule描述这里
该TemporaryFolder创建由系统属性java.io.tmpdir指定的默认临时文件目录的文件夹.newFile方法在临时目录中创建一个新文件,newFolder创建一个新文件夹.
当测试方法完成时,JUnit会自动删除TemporaryFolder中的所有文件和目录.无论测试通过还是失败,JUnit都保证删除资源.
问题更新后
您可以更改使用的工作目录maven-surefire-plugin
.
<plugins>
[...]
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.3</version>
<configuration>
<workingDirectory>${project.build.directory}</workingDirectory>
</configuration>
</plugin>
[...]
</plugins>
Run Code Online (Sandbox Code Playgroud)
您可以将该工作目录更改为测试所需的任何内容${project.build.directory}/my_special_dir/
.
surefire插件中的工作目录仅影响正在运行的测试,仅适用于由maven执行的测试.如果从IDE中运行测试,则工作目录将是其他内容.
Boh*_*ian 41
无需重新发明轮子......
JDK提供了一种创建临时文件的方法,以及一种在退出时自动删除它的方法:
File file = File.createTempFile( "some-prefix", "some-ext");
file.deleteOnExit();
Run Code Online (Sandbox Code Playgroud)
使用该文件,测试完成后将自动删除该文件.这里的所有都是它的.
要指定用于临时文件的目录,请使用重载方法:
File file = File.createTempFile( "prefix", "ext", new File("/some/dir/path"));
Run Code Online (Sandbox Code Playgroud)
从 JUnit 5 开始,您可以使用@TempDir。测试结束后它将被删除(包括其内容)。
每个测试使用一个临时目录:
@Test
void testWithTempFiles(@TempDir Path tempDir)
Path file = tempDir.resolve("temp_file.txt");
...
}
Run Code Online (Sandbox Code Playgroud)
或班级中所有测试的单个测试:
@TempDir
static Path tempDir
@Test
void testWithTempFiles()
Path file = tempDir.resolve("temp_file.txt");
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
56670 次 |
最近记录: |