我有一個掃描檔案并為一個物件賦值的方法:
我有一個掃描檔案并為一個物件賦值的方法。
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。
uj5u.com熱心網友回復:
使這段代碼可以進行單元測驗的基本方法是,不要硬編碼使用input.txt檔案。
Stultuske 建議將File作為一個引數傳遞給方法,以便你在測驗期間可以為一個任意的檔案運行該方法。
我想比這更進一步,并說:傳入一個Reader。Scanner有一個接受Reader的建構式,然后你就不必在單元測驗中搞亂檔案。
例如,你可以構建一個StringReader,其中包含一個硬編碼的字串,即 "檔案內容"。
StringReader sr = new StringReader("John Smith。 45;
Adam West;78;")。)
注意,如果你傳入一個Reader,你不應該在最后關閉Scanner,因為這將關閉Reader;對于代碼來說,關閉一個它沒有打開的Reader(或Writer或Input/OutputStream;一般是任何資源)是不好的做法。
public void scanLocalFile(Reader r) {
Scanner scan = new Scanner(r)。
while (scan.hasNextLine()) {
// ....
}
}
實際上,由于你只是從Scanner中讀取行,我認為使用BufferedReader會更好:
public void scanLocalFile( Reader r) {
new BufferedReader(r).lines()
.map(line -> {
String[] fields = line.split("; ")。
return new Customer(field[0], fields[1] )。)
})
.forEach(customerList::add)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/333342.html
標籤:
