use*_*315 10 java junit unit-testing file mockito
我知道这有点天真.如何在不提供物理文件作为输入的情况下对这段代码进行单元测试.我是模拟和单元测试的新手.所以我不确定.请帮忙.
public static String fileToString(File file) throws IOException
{
BufferedReader br = new BufferedReader(new FileReader(file));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append("\n");
line = br.readLine();
}
return sb.toString();
} finally {
br.close();
}
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*rey 20
您可以创建一个文件作为测试的一部分,无需模拟它.
JUnit确实有一个很好的功能来创建用于测试的文件,并使用TemporaryFolder
规则自动清理它们.
public class MyTestClass {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void myTest() {
// this folder gets cleaned up automatically by JUnit
File file = folder.newFile("someTestFile.txt");
// populate the file
// run your test
}
}
Run Code Online (Sandbox Code Playgroud)
你应该重构你的方法.如您所知,将文件作为输入的方法不容易测试.此外,它似乎是静态的,这无助于可测试性.如果您将方法重写为:
public String fileToString(BufferedReader input) throws IOException
Run Code Online (Sandbox Code Playgroud)
它会更容易测试.您将业务逻辑与读取文件的技术分开.据我所知,您的业务逻辑是读取流并确保行结尾是unix样式.
如果你这样做,你的方法将是可测试的.您还可以使它更通用:它现在可以从文件,URL或任何类型的流中读取.更好的代码,更容易测试......
归档时间: |
|
查看次数: |
14106 次 |
最近记录: |