在使用 Maven 进行单元测试期间写入临时文件的正确方法是什么?

新手上路,请多包涵

我编写了一个单元测试,将文件写入文件系统,没有给出写入工作目录的路径;因此,如果从项目目录执行,它会写入项目根目录,如果在项目父目录中,它会写入父根目录。

那么写入目标目录的正确方式是什么呢?很可能是目标目录中的一个目录?

如果我非常简单地指定 target/ 文件,它将写入父项目目标而不是项目目标。

更新:我实际上想要测试完成后的文件。该文件为第三方提取格式,需要发送给第三方。可以打开/关闭测试,以允许我仅在文件格式更改以重新批准时运行。文件去哪里不是一个大问题,但我想要一些容易找到的东西。

原文由 Brett Ryan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 608
2 个回答

您可以尝试按照 此处 所述使用 TemporaryFolder JUnit @Rule

TemporaryFolder 在系统属性 java.io.tmpdir 指定的默认临时文件目录中创建一个文件夹。 newFile 方法在临时目录中创建一个新文件,newFolder 方法创建一个新文件夹。

当测试方法完成时,JUnit 会自动删除 TemporaryFolder 中的所有文件和目录,包括 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>

您可以将该工作目录更改为测试所需的任何内容,例如 ${project.build.directory}/my_special_dir/

surefire 插件中的工作目录仅影响正在运行的测试,并且仅适用于由 maven 进行的测试。如果您从 IDE 中运行测试,工作目录将是另外一个目录。

原文由 maba 发布,翻译遵循 CC BY-SA 4.0 许可协议

无需重新发明轮子…

JDK 提供了一种创建临时文件的方法,以及一种在退出时自动删除它的方法:

 File file = File.createTempFile( "some-prefix", "some-ext");
file.deleteOnExit();

使用该文件,它会在您的测试完成后自动删除。这里的所有都是它的。

要指定用于临时文件的目录,请使用重载方法:

 File file = File.createTempFile( "prefix", "ext", new File("/some/dir/path"));

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题