gpt4 book ai didi

java - 使用 Junit 进行文件操作

转载 作者:行者123 更新时间:2023-12-01 17:47:21 24 4
gpt4 key购买 nike

在我的程序中,每当我创建/更新/删除我的对象时,我都会创建文件以将信息发送到现有的 FTP 服务器。为此,我创建了一个文件夹 INFO_FOLDER,我可以创建这些文件并将其发送到服务器。

另一方面,在运行单元测试时,文件会创建到同一文件夹中。这不太好,因为那里可能有真正的程序相关文件,并且我不想将其与测试相关文件混合在一起。

我需要通过 @After 方法删除每个测试中创建的每个文件,或者我需要使用不同的文件夹进行单元测试。不知道第二种是否可行。

我该如何处理这个问题?哪种方式更优雅?或者这个问题还有其他众所周知的解决方案吗?

最佳答案

因此,如果您对代码进行单元测试,则不应处理 I/O,因为文件系统是外部资源,并且您应该使用测试替身(模拟)。单元测试就是单独测试单个事物。

如果您的方法只是输出到 FS,那么您可以验证是否使用 Mockito.verify 调用了特定的 write 方法。 。最好编写集成测试来检查组件是否正确集成在一起(即您的代码与 FS)。例如,

生产代码:

  public void writeToOutput(String path) {
FS.writeOutput(path);
}

测试代码:

@Test
public void writes_to_output() {
String path = "./sample.txt";
FS fs = mock(FS.class); //mock the class that writes to output

service.writeToOutput(path); //do the action

verify(fs).writeOutput(path); //verify that your FS class called writeToOutput with the given argument
}

但是,如果您想进行集成测试并检查文件是否写入 FS,那么您应该将输出重定向到不同的位置(如果您的路径硬编码在生产代码上,则不可能重定向它在其他地方),在你的测试目录中。

您永远不应该运行会扰乱生产代码(src 文件夹)的测试

关于java - 使用 Junit 进行文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60845261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com