gpt4 book ai didi

java - 关于如何测试接收字符串并将其放入 ArrayList 的 BufferedReader 和 FileReader 的建议

转载 作者:行者123 更新时间:2023-12-02 18:05:17 26 4
gpt4 key购买 nike

我有一个类,它有一个方法可以逐行读取文本文件,然后将每一行放入字符串的 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;
}

}

我希望得到一些关于如何通过涉及 Arrange/Act/Assert 的 Mockito 测试此方法的建议。我听说涉及文本文件的读者可能很难测试,并且创建临时文件不是最佳实践,因为它会占用内存?任何建议将不胜感激。

最佳答案

由于文件名 countriesInEurope.txt 在您的实现中进行了硬编码,因此无法测试。使其可测试的一个好方法是重构该方法以采用 Reader 作为参数:

public List<String> showListOfCourses(Reader reader) throws IOException {
BufferedReader br = new BufferedReader(reader);
List<String> courseList = new ArrayList<>();

// ...

return courseList;
}

您的主要实现可以将 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));
}

顺便说一句,方法的名称不好,因为它没有“显示”任何东西。readListOfCourses 会更有意义。

关于java - 关于如何测试接收字符串并将其放入 ArrayList 的 BufferedReader 和 FileReader 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292032/

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