[英]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;
}
}
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));
Define a getter (either public
or protected
)定义一个 getter(
public
或protected
)
protected BufferedReader getReader(){ return reader; }
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; }
In your test class initialize your ConsoleReader
as Mockito.spy
在您的测试类
ConsoleReader
您的ConsoleReader
初始化为Mockito.spy
ConsoleReader consoleReader = spy(new ConsoleReader());
Mock your getter模拟你的吸气剂
private BufferedReader bufferedReader = mock(BufferedReader.class); @Before public void setUp() { doReturn(bufferedReader).when(consoleReader).getReader(); doCallRealMethod().when(consoleReader).readInput(); }
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.