[英]Junit Test for InputStreamReader with Mockito
你能幫我為下面的代碼編寫 Junit 測試用例嗎?
public class ConsoleReader implements InputReader {
public Cell readInput() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = reader.readLine();
String[] values=coOrdinates.split("\\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
}
將reader
提取為一個字段。 (您可以直接或在構造函數中初始化它)
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
定義一個 getter( public
或protected
)
protected BufferedReader getReader(){ return reader; }
從您的方法中刪除new BufferedReader(...)
初始化。 改為使用getReader()
檢索它。
public Cell readInput() { try { System.out.print("Enter the co-ordinate Seperated by Comma"); String coOrdinates = getReader().readLine(); String[] values=coOrdinates.split("\\\\,"); return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1])); } catch (IOException ioe) { ioe.printStackTrace(); } return null; }
在您的測試類ConsoleReader
您的ConsoleReader
初始化為Mockito.spy
ConsoleReader consoleReader = spy(new ConsoleReader());
模擬你的吸氣劑
private BufferedReader bufferedReader = mock(BufferedReader.class); @Before public void setUp() { doReturn(bufferedReader).when(consoleReader).getReader(); doCallRealMethod().when(consoleReader).readInput(); }
定義你的測試:
@Test public void testReadInput() { when(bufferedReader.readLine()).thenReturn("123,456"); Cell expectedCell = new Cell(123, 456); Cell actualCell = consoleReader.readInput(); assertEquals(expectedCell, actualCell); }
您可以使用 Mockito 來模擬 BufferedReader,如下例所示。
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
Mockito.when(bufferedReader.readLine()).thenReturn("1", "2", "3");
// You can mock the result based on the type of result you are expecting.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.