当前位置: 首页 > 面试题库 >

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

潘俊楚
2023-03-14
问题内容

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

那么写入目标目录的正确方法是什么?可能是目标目录中的目录?

如果我只target/用文件指定,它将写入父项目目标而不是项目目标。

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


问题答案:

您可以按此处所述尝试使用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>

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

surefire插件中的工作目录仅影响正在运行的测试,并且仅影响由maven进行的测试。如果从IDE内运行测试,则工作目录将是其他目录。



 类似资料:
  • 问题内容: 在我的项目中,我可以成功测试数据库代码。我正在使用Spring,Hibernate,HSQLDB,JUnit和Maven。 问题是,当前我必须在运行测试之前手动启动HSQLDB。使用所使用的技术自动启动HSQLDB的最佳方法是什么? 问题答案: 我假设与您一起指的是HSQLDB。 将JDBC驱动程序(用于hibernate等)的数据库URL配置为基于嵌入式内存的HSQLDB版本: 然后

  • 我有Maven应用程序,具有3个不同的配置文件,如下所示 我有这样的Maven结构: src/main/config/default/WEB-INF/WEB。xml src/main/config/dev/WEB-INF/WEB。xml src/main/config/test/WEB-INF/web.xml src/main/config/prod/WEB-INF/web.xml src/mai

  • 问题内容: 我已经习惯了 但是,似乎已经弃用了。推荐使用哪种方法进行上述操作? 更新:关于…的所有这些答案,”\n”这是通用的还是特定于的?IE,我应该上运行吗? 问题答案: 这应该很简单: 从文档: 写入以文本模式打开的文件时(默认),请勿用作行终止符;在所有平台上都使用一个’\ n’代替。 一些有用的读物​​: with声明 open() ‘a’用于追加或使用 ‘w’截断书写 os(特别是os

  • 我正在尝试使用测试驱动设计方法编写一个应用程序--我对单元测试很陌生,所以我只是想知道测试正确输入和异常的正确方法是什么。 我有一个用于加载配置文件的类: null 另外,这3个测试是否都有try{}catch(){}语句?在第一个测试中,正确性是隐含的,在第二个和第三个测试中,我无论如何都在检查异常,所以异常对测试没有影响。

  • 我有以下方法,它采用UNIX时间戳并以天、小时或分钟的形式返回年龄。我想用JUnit单元测试它,但我不确定如何开始这样做,因为当前时间不断变化。有什么建议吗?谢谢! 方法如下: }

  • 问题内容: 假设我有以下模型: 我想通过创建一个在将来(今天+ 1或某天)结束的事件进行测试,并对日期和时间进行打桩,以便系统认为我们已经达到了该将来的日期。 就python而言,我希望能够存根所有系统时间对象。这包括,和任何其他标准日期/时间对象。 这样做的标准方法是什么? 问题答案: 编辑 :由于我的答案是此处接受的答案,因此我正在对其进行更新,以使所有人都知道在此同时创建了更好的方法,这是f