Big*_*992 2 java tdd file-io mocking mockito
我有一个类,它有一个逐行读取文本文件的方法,然后将每一行放入一个ArrayList字符串.这是我的代码:
public class ReadFile {
public List<String> showListOfCourses() throws IOException {
String filename = "countriesInEurope.txt";
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
List<String> courseList = new ArrayList<>();
while (true) {
String line = br.readLine();
if (line == null) {
break;
}
courseList.add(line);
}
br.close();
return courseList;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望通过Mockito涉及Arrange/Act/Assert 来测试这种方法的一些建议.我听说涉及文本文件的读者可能很难测试,创建临时文件不是最好的做法,因为它耗尽了内存?任何建议将非常感谢.
由于文件名countriesInEurope.txt在您的实现中是硬编码的,因此这是不可测试的.使这个可测试的一个好方法是重构该方法以获取Readeras参数:
public List<String> showListOfCourses(Reader reader) throws IOException {
BufferedReader br = new BufferedReader(reader);
List<String> courseList = new ArrayList<>();
// ...
return courseList;
}
Run Code Online (Sandbox Code Playgroud)
您的主要实现可以传递FileReader给它.另一方面,在测试时,您的测试方法可以传递一个StringReader实例,该实例很容易使用示例内容作为简单字符串创建,不需要临时文件,例如:
@Test
public void showListOfCourses_should_read_apple_orange_banana() {
Reader reader = new StringReader("apple\norange\nbanana");
assertEquals(Arrays.asList("apple", "orange", "banana"), showListOfCourses(reader));
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,该方法的名称并不好,因为它没有"显示"任何东西.
readListOfCourses会更有意义.
| 归档时间: |
|
| 查看次数: |
4027 次 |
| 最近记录: |