![](/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.