简体   繁体   English

使用 Mockito 对 InputStreamReader 进行 Junit 测试

[英]Junit Test for InputStreamReader with Mockito

Can you please help me in writing the Junit test case for the below code?你能帮我为下面的代码编写 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. Extract the reader as a field.reader提取为一个字段。 (You can initiaize it either directly or in constructor) (您可以直接或在构造函数中初始化它)

     private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  2. Define a getter (either public or protected )定义一个 getter( publicprotected

     protected BufferedReader getReader(){ return reader; }
  3. Remove initialization of new BufferedReader(...) from your method.从您的方法中删除new BufferedReader(...)初始化。 Retrieve it using getReader() instead.改为使用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. In your test class initialize your ConsoleReader as Mockito.spy在您的测试类ConsoleReader您的ConsoleReader初始化为Mockito.spy

     ConsoleReader consoleReader = spy(new ConsoleReader());
  5. Mock your getter模拟你的吸气剂

    private BufferedReader bufferedReader = mock(BufferedReader.class); @Before public void setUp() { doReturn(bufferedReader).when(consoleReader).getReader(); doCallRealMethod().when(consoleReader).readInput(); }
  6. Define your test:定义你的测试:

     @Test public void testReadInput() { when(bufferedReader.readLine()).thenReturn("123,456"); Cell expectedCell = new Cell(123, 456); Cell actualCell = consoleReader.readInput(); assertEquals(expectedCell, actualCell); }

You can use Mockito to mock the BufferedReader, like the example below.您可以使用 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