gpt4 book ai didi

java - 用 Java 编写单元测试文件,无需接口(interface)包装器

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

我有一个现有的 Java 类,可以写入文件。

public final class WriteToFile{

private Writer file_writer;
private static final String encoding_format = "UTF8";
private FileWrite(final File fpath) throws IOException {
this.file_writer = new OutputStreamWriter(new FileOutputStream(fpath), encoding_format);
}

@Override
public void fileWrite(final String msg) {
try {
this.file_writer.write(msg);
this.file_writer.write("\n");
this.file_writer.flush();
this.file_writer.close();
} catch (IOException e) {
log.error("File write failed", e);
}
}

}

为了对此进行单元测试,我了解到使用 Mocking 框架创建文件模拟并不是一个好的做法。我在这里测试什么?测试这一点的唯一方法可能是再次写入文件,并检查预期内容和实际内容是否相同。在这种情况下,按照 JUnit 方式执行此操作将如本文 How to test write to file in Java? 中所述。 。但是,我不会重写文件编写代码以包含接口(interface)包装器。我该如何处理这个问题?

@Test public void testfileWrite() {
String msg = "somemessage";
String fpath = "path/to/file";
Writer file_writer = new OutputStreamWriter(new FileOutputStream(fpath), "UTF8");
file_writer.write(msg);
assertEquals("somemessage", file_writer.toString());
}

这就是需要测试的全部内容吗?

最佳答案

这个类的重点是写一个文件。它没有做任何其他事情(这是一件好事)。因此,不必费心进行模拟单元测试,它所显示的只是您可以编写大量模拟代码。相反,编写集成测试。

使用 JUnit 规则 TemporaryFolder创建和销毁一个文件夹来放置测试文件,然后在测试结束时验证该文件是否包含您想要的内容。您应该考虑对此类测试进行模拟的唯一时间是异常情况做了一些奇怪的事情。然后你可以做一些邪恶的黑魔法涉及 Powermock或传递某种形式的“文件流工厂”。或者问问自己这是否真的是一个适合需要测试的复杂逻辑的地方,然后移动它。

测试使用 WriteToFile、模拟或 stub WriteToFile 的类时。

关于java - 用 Java 编写单元测试文件,无需接口(interface)包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35604155/

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