繁体   English   中英

作为参数传递时如何模拟依赖项?

[英]How to mock an dependency when passed as an argument?

我们创建了一个通用类,其中将 RestTemplate 作为参数传递。 这个休息模板用于促进:

  • postForEntity
  • 交换

但是,由于它不是在公共类中自动装配的,因此我无法创建模拟 RestTemplate 的单元测试。 有解决办法吗?

设置:

Spring boot 项目 A - 启动一个 rest 集成并利用公共类。 这个项目 A 实例化了@Autowired RestTemplate 休息模板,并将其作为参数传递给公共类方法。

Spring boot Common Class - 进行其余集成,但使用项目 A 传递的其余模板。这个公共类我无法进行单元测试,因为我无法模拟 Rest Template。

这是一个 java spring boot 项目。

附录:

**普通班

public class RestService {


     public static void invoke(RestTemplate restTemplate, RequestDetails requestDetails) {

      switch (requestDetails.getHttpMethod()) {
            case POST:
                HttpEntity<?> postEntity = new HttpEntity<>(request, httpHeaders);
                restResponse = restTemplate.postForEntity(requestDetails.getUrl(), postEntity, String.class);
                break;
            case GET:
                HttpEntity<?> getEntity = new HttpEntity<>(httpHeaders);
                restResponse = restTemplate.exchange(requestDetails.getUrl(),
                    HttpMethod.GET, getEntity, String.class);
                break;
            default:
                break;

        }

    }

}

** 调用类

public class InvokingClass {

    @Autowired
    private RestTemplate restTemplate;


     public void invoke() {

     //RequestDetails construct here ...

        RestService.invoke(restTemplate,requestDetails)
    }

}

我不确定您要达到的目标。 如果你想测试你的RestService你应该能够做这样的事情:

    @Test
    void test() {
        RestTemplate templateMock = mock(RestTemplate.class);
        RestService.invoke(templateMock, new RequestDetails());
        verify(templateMock).postForEntity(any(URI.class), any(Object.class), any(Class.class));
    }

如果这不是您要查找的内容,请提供有关您要测试的内容的更多详细信息。 谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM