我的问题和这个问题是一样的。但是,我的 BufferedReader 将 InputStreamReader 作为参数。我的代码如下所示:
URL url = new URL("http://localhost:8080/endpoint");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//Line of importance:
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
如何注入它,以便我可以模拟它进行单元测试?提前谢谢。
编辑:添加了测试代码(我认为它应该如何工作(:
添加 bean(?
@Bean
public BufferedReader bufferedReader() throws FileNotFoundException {
return new BufferedReader(new InputStreamReader());
}
使用模拟实例模拟所有依赖项:
@Mock
private HttpURLConnection httpURLConnection;
@Mock
private BufferedReader bufferedReader;
@Mock
private InputStream inputStream;
when(URLhandlerClass.getPath(any(String.class))).thenReturn("http://localhost:8080/endpoint);
when(bufferedReader.readLine()).thenReturn("firstLine", "secondLine", "thirdLine");
when(httpURLConnection.getInputStream()).thenReturn(inputStream);
错误:文件未找到异常和连接:连接被拒绝
你到底想嘲笑什么? 我在这里看到的最简单的方法是伪造整个方法,例如将所有内容包装在服务中并在测试代码时模拟整个方法。
例如
@Service
public class DataReader {
public BufferedReader ReadDataFrom(string url){
URL url = new URL("http://localhost:8080/endpoint");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//Line of importance:
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
}
}
这很容易被伪造。 通常,当你遇到一个问题时,你问自己"wtf 我嘲笑这个?"解决方案是服务;)