簡體   English   中英

使用 Mockito 對 InputStreamReader 進行 Junit 測試

[英]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;
    }
}
  1. reader提取為一個字段。 (您可以直接或在構造函數中初始化它)

     private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  2. 定義一個 getter( publicprotected

     protected BufferedReader getReader(){ return reader; }
  3. 從您的方法中刪除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; }
  4. 在您的測試類ConsoleReader您的ConsoleReader初始化為Mockito.spy

     ConsoleReader consoleReader = spy(new ConsoleReader());
  5. 模擬你的吸氣劑

    private BufferedReader bufferedReader = mock(BufferedReader.class); @Before public void setUp() { doReturn(bufferedReader).when(consoleReader).getReader(); doCallRealMethod().when(consoleReader).readInput(); }
  6. 定義你的測試:

     @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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM