![](/img/trans.png)
[英]How to throw JsonProcessingException while creating Json from List using Mockito?
[英]how to throw IOException while reading a file using Mockito?
我必须使用Mockito为一个方法抛出一个IOException
,它正在读取一个输入流,如下所示。 有什么办法吗?
public void someMethod(){
try{
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
firstLine = in.readLine();
}catch(IOException ioException){
//Do something
}
我试着嘲笑
BufferedReader buffReader = Mockito.mock(BufferedReader.class);
Mockito.doThrow(new IOException()).when(buffReader).readLine();
但没有成功:(
你在嘲笑BufferedReader,但你的方法不使用你的模拟。 它使用自己的新BufferedReader。 您需要能够将模拟注入到方法中。
看起来inputStream
是包含此方法的类的字段。 所以你可以改为模拟inputStream,并在调用read()
方法(由InputStreamReader)时抛出一个IOException。
你不能在这里模拟BufferedReader
,因为它是在方法中创建的。
尝试模拟inputStream
并从InputStream.read()
抛出异常。
我建议的方法是有一个额外的类来管理BufferedReader
的创建。 这个类只有一个方法,其中没有实际的逻辑,所以它不需要任何单元测试。
public class BufferedReaderFactory{
public BufferedReader makeBufferedReader(InputStream input) throws IOException{
return new BufferedReader(new InputStreamReader(input));
}
}
现在,将BufferedReaderFactory
类型的私有字段添加到您正在测试的类中,同时添加一个注入它的方法 - setter方法或备用构造函数。 在类的标准构造函数中,实例化BufferedReaderFactory
并相应地设置字段。 在someMethod()
,在字段上调用makeBufferedReader()
方法,而不是使用new
。
你的课程更容易考试; 因为现在,您可以编写一个测试,在调用someMethod()
之前将someMethod()
BufferedReaderFactory
注入您正在测试的对象。 在那个makeBufferedReader
,你可以存根makeBufferedReader
方法来抛出你想要的异常。
如果您希望我详细了解上述任何步骤,请添加评论。 您可能还想在Mockito wiki上阅读关于模拟对象创建的帖子; 这与此密切相关。
但最重要的信息是,让你的课程可测试是非常重要的,你将获得这么多次这样做的好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.