如何在使用Mockito读取文件时抛出IOException?

Bal*_*kar 5 java unit-testing mocking mockito

我必须抛出一个IOException使用Mockito的方法,它正在读取输入流,如下所示.有什么办法吗?

public void someMethod(){
 try{
  BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
  firstLine = in.readLine();
 }catch(IOException ioException){
  //Do something
 }
Run Code Online (Sandbox Code Playgroud)

我试着嘲笑

  BufferedReader buffReader = Mockito.mock(BufferedReader.class);
  Mockito.doThrow(new IOException()).when(buffReader).readLine();
Run Code Online (Sandbox Code Playgroud)

但没有成功:(

JB *_*zet 7

你在嘲笑BufferedReader,但你的方法不使用你的模拟.它使用自己的新BufferedReader.您需要能够将模拟注入到方法中.

它似乎inputStream是包含此方法的类的字段.因此,您可以模拟inputStream,并在read()调用其方法时(通过InputStreamReader)使其抛出IOException .

  • 我想进一步补充一点,您可以通过执行类似的操作来实现此目的:`InputStream fileContents =间谍(new ByteArrayInputStream(FILE_CONTENTS)); doThrow(new IOException()).when(fileContents).read(any(byte[].class));` (2认同)