【发布时间】:2021-09-22 08:04:54
【问题描述】:
我有一个扫描文件并将值分配给对象的方法:
private List<Customer> customerList = new ArrayList<Customer>();
public void scanLocalFile() throws FileNotFoundException {
File file = new File("input.txt");
Scanner scan = new Scanner(file);
while (scan.hasNextLine()) {
String[] fields = line.split(";");
String name = fields[0];
String score = fields[1];
Customer customer = new Customer(name, score);
customerList.add(customer);
}
scan.close();
}
如何为这样的方法编写 junit 测试?单元测试是否也可以使用相同的文件(“input.txt”)?
文件结构:
John Smith;45;
Adam West;78;
【问题讨论】:
-
不要对文件进行硬编码;确保您可以将其作为参数传递给该方法。然后使用测试输入文件调用该方法,然后检查 customerList 的内容
-
或者,传入一个
Reader作为Scanner构造函数的参数:那么您甚至不必担心文件,因为您可以使用例如StringReader。但是请注意,如果您传入Reader,则不应在最后关闭Scanner,因为这将关闭Reader;代码关闭未打开的Reader(或Writer或Input/OutputStream)是不好的做法。 -
另外:将
customerList作为您添加的字段有点可疑(如果您调用scanLocalFile()两次呢?)。在这个方法中构造一个新列表,添加到它,然后返回列表。