Тест Junit для InputStreamReader с Mockito - PullRequest
0 голосов
/ 20 ноября 2018

Не могли бы вы помочь мне в написании теста 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;
    }
}

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018
  1. Извлеките reader как поле.(Вы можете инициировать его либо непосредственно, либо в конструкторе)

    private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    
  2. Определить метод получения (либо public, либо protected)

    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 как Mockito.spy

    ConsoleReader consoleReader = spy(new ConsoleReader());
    
  5. Макет вашего геттера

    @Before
    public void setUp() {
        BufferedReader bufferedReader = mock(BufferedReader.class);
        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);   
    }
    
0 голосов
/ 20 ноября 2018

Вы можете использовать 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...