【发布时间】:2017-08-23 12:01:37
【问题描述】:
我正在尝试测试一个进行文件/流处理的类。例如,readFile 方法将使用BufferedReader 返回一个字符串的ArrayList,其中包含文件的每一行:
public ArrayList<String> readFile(String fileName)
{
ArrayList<String> result = new ArrayList<String>();
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(STORAGE_DIRECTORY+fileName);
br = new BufferedReader(fr);
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
result.add(sCurrentLine);
}
}
catch (FileNotFoundException e) {
return new ArrayList<String>();
} catch (IOException e) {
return new ArrayList<String>();
}
br.close();
fr.close();
return result;
}
但是当我使用 Mockito 来模拟 bufferedReader 方法“readLine()”时,由于 FileReader 构造函数而抛出了 FileNotFoundException。我必须使用temporaryFile 还是模拟FileReader 构造函数?
@Test
public void readFileTest5() throws Exception {
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
FileReader fileReader = Mockito.mock(FileReader.class);
when(BufferedReader.readLine()).thenReturn("abc");
assertEquals("",new ArrayList<String>(), FileUtil.readFile("abc"));
}
谢谢
【问题讨论】:
-
我的错,我应该写全班第一。 BufferedReader 在这里是注入注解(spring 风格)的类的一个实例。
@MockBean private BufferedReader bufferedReader; @MockBean private java.io.FileReader fileReader; @MockBean private File File; @InjectMocks private com.example.system.FileUtil FileUtil; -
您应该将缓冲区构造提取到单独的方法中并模拟该方法以返回模拟的 BufferedReader,其“readLine”返回您想要的内容。或者可能不要试图嘲笑这个简单的东西:资源泄漏问题更加明显。
-
好的,谢谢,“资源泄漏”是什么意思?
-
发生异常时不要关闭阅读器。
-
谢谢,我刚刚删除了部分代码以专注于我的问题,但我可以解决这个问题。
标签: java unit-testing testing mockito