我正在尝试为采用String文件名的方法编写单元测试,然后打开文件并从中读取.因此,为了测试该方法,我考虑编写一个文件,然后调用我的方法.但是,在构建服务器场中,无法将文件任意写入磁盘.有没有一种标准的方法来"模拟"我的单元测试中有一个真实的文件?
我有一个写入文件的现有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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了对此进行单元测试,我了解到使用Mocking框架创建文件模拟并不是一个好习惯.我在这里测试什么?测试这个的唯一方法是再次执行文件写入,并检查预期内容和实际内容是否相同.在这种情况下,以JUnit方式执行此操作将如本文中提到的如何在Java中测试写入文件?.但是,我不打算重写文件编写代码,以包含接口包装器.我该如何解决这个问题?
@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()); …Run Code Online (Sandbox Code Playgroud)