java - 如何使用 Spring Boot 注入(inject)以 InputStreamReader 作为参数的 BufferedReader?

标签 java spring-boot unit-testing dependency-injection mockito

我的问题与 this question 相同。但是,我的 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())));

我如何注入(inject)它,以便我可以模拟它进行单元测试?提前致谢。

编辑:添加测试代码(我认为它应该如何工作):

添加一个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);

错误:FileNotFoundException 和连接:连接被拒绝

最佳答案

你到底想 mock 什么? 我在这里看到的最简单的方法是伪造整个方法,例如将所有内容包装在服务中,并在测试代码时对其进行整体模拟。

例如

@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())));
    }
}

这很容易被伪造。 通常,当你遇到问题时,你会问自己“我怎么 mock 这个?”解决方案是服务;)

关于java - 如何使用 Spring Boot 注入(inject)以 InputStreamReader 作为参数的 BufferedReader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57865707/

相关文章:

php - 测试非 OOP PHP

python 模块变量作为 function_default 不可变

java - 在 Eclipse 中导入 WAR 文件时出现问题?

java - 为什么验证不适用于 DTO 类型的对象,而仅适用于实体

spring - org.springframework.data.mapping.PropertyReferenceException : No property detachItem found for type Fruit

java - 使用 Spring Data JPA Stream 获取数据

java - 测试是否发出了良好的查询

java - 如何在 Coldfusion 9 中使用 java 文件?

java - Mac OS X 10.5 上的 SWT 和 Java WebStart

java - 如何在java中循环解析已解析的字符串