我在一个方法中得到了下面的代码,我想要测试它
File f = map.get("key1")
BuffereReader r = new BufferedReader(new FileReader(f));
String line=null;
do {
line=r.readLine();
} while(r!=null);
我想模拟这个操作,以便我可以从Junit测试用例中传递文件的内容。我已经完成了以下步骤:
Map fles = Mockito.mock(ConcurrentHashMap.class);
File file = Mockito.mock(File.class);
Mockito.when(files.get("key1")).thenReturn(file);
FileReader fileReader = Mockito.mock(FileReader.class);
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
try {
PowerMockito.whenNew(FileReader.class).withArguments(file).thenReturn(fileReader);
PowerMockito.whenNew(BufferedReader.class).withArguments(fileReader).thenReturn(bufferedReader);
PowerMockito.when(bufferedReader.readLine()).thenReturn("line1")
.thenReturn("line2").thenReturn("line3");
} catch (Exception e) {
Assert.fail();
}
基本上我需要将文件中的“line1”,“line2”和“line3”作为行通过模拟的BufferedReader读取。
然而,在执行这个操作时,它会在尝试实例化new FileReader(f)部分时失败并抛出NullPointerException异常。
那么是因为我不能模拟BufferedReader还是我的方法有问题?
谢谢。
new BufferedReader(new StringReader("line1\nline2\nline3"))
。 - Jeff Bowman