当前位置: 首页 > 知识库问答 >
问题:

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

刁冠宇
2023-03-14

我们创建了一个公共类,其中RestTemplate作为参数传递。此rest模板用于促进:

  • 发布实体
  • 交换

但是,由于它在公共类中不是Autowyah,我无法创建模拟RestTemplate的单元测试。有没有解决这个问题的方法?

设置:

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

Spring boot公共类-执行rest集成,但使用项目A传递的rest模板。由于无法模拟rest模板,因此我无法执行单元测试。

这是一个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)
    }

}

共有1个答案

呼延弘方
2023-03-14

我不确定你想要实现什么。如果您想测试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));
    }

如果这不是你想要的,请提供更多关于你试图测试的细节。谢谢。

 类似资料:
  • 我的功能组件中有以下hook,我只想使用一次(当组件挂载时),以便从API加载一些数据: React留档说明,当您只希望效果在挂载卸载时运行时,这是有效的做法: 如果您想运行一个效果并只清除它一次(在挂载和卸载时),您可以传递一个空数组([])作为第二个参数。这告诉React,你的效果不依赖于道具或状态的任何值,所以它永远不需要重新运行。这不是作为特例处理的——它直接遵循依赖数组的工作方式。 但我

  • 在应用中,您希望使用不同的类来处理不同的任务以保持代码的简洁。我们把这些类称为 依赖。如何将这些依赖关系传递给将在后台任务调用的方法呢? 当您在后台任务中调用静态方法时,仅限于应用程序的静态上下文,这需要您使用以下获取依赖关系的模式: 通过 new 手动实例化依赖 服务定位器模式 抽象工厂模式 或 建设者模式 单例模式 然而,所有这些模式使您的应用程序的单元可测试性方面变得非常复杂。为了解决这个问

  • 我一直试图模仿我的服务/业务类来开始测试我的应用程序,但有许多对其他类的“依赖”,主要是存储库和传递给这些存储库的存根。为了能够对我的服务进行单元测试,我一直试图设置它,但我不断地得到错误,我真的不知道我的设置是否正确: 我没有包括接口,因为我觉得没有必要,但如果需要,可以。 但正如您所看到的,我需要传递2个模拟存储库,它们自己是从一个模拟的“存根”实例化的,这就是我的问题。 我尝试过许多不同的方

  • 我有一个非常简单的场景可以使用 DI 解决,但我无法找到合适的示例/文档来帮助我完成。我是Scala/Guice世界的新手。 当前组件看起来像这样 现在,我在Foo和Bar之间有一个依赖项。所以,通常代码看起来像这样 其中只是返回。当然,为了简洁起见,我删除了工厂/助手。 我意识到,当我使用“new”时,这已经脱离了DI范式。我希望确保可以基于参数将Bar注入FooImpl。有点像使用工厂。我们如

  • 主要内容:依赖传递,依赖范围,依赖范围对传递依赖的影响,依赖调节Maven 依赖传递是 Maven 的核心机制之一,它能够一定程度上简化 Maven 的依赖配置。本节我们将详细介绍依赖传递及其相关概念。 依赖传递 如下图所示,项目 A 依赖于项目 B,B 又依赖于项目 C,此时 B 是 A 的直接依赖,C 是 A 的间接依赖。 Maven 的依赖传递机制是指:不管 Maven 项目存在多少间接依赖,POM 中都只需要定义其直接依赖,不必定义任何间接依赖,Mav

  • 假设我们有python中的函数: 虽然我可能会将传递给A,但我正在寻找一种优雅的方法来传递类似于的东西来执行。 我现在看到的唯一方法是发送一个函数列表并按顺序应用它们。有没有更好的办法?