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

测试中的深度/嵌套依赖注入

姚实
2023-03-14

我正在使用垃圾,模拟和模拟MVC来测试网络应用程序的工作。我正在与一个我无法弄清楚的注入的依赖关系作斗争。我的网络应用程序结构如下。

Class Controller{

    @Autowired Service searchService;

    @RequestMapping("Search")
    public returnType search(@RequestParam("parameter")String parameter){
        searchService.doSearch(parameter);
    }        
}

和服务级别

Class Service{
    @Autowired Service2 service2;

    public returnType doSearch(String parameter){
        //some code
        service2.call(parameter);
    }
}

我需要测试此控制器的搜索方法,但是service2当前不活动,因此必须模拟对它的调用。我可以模拟service2,但不知道如何在控制器的mockMVC实例中注入service2的模拟。据我所知,mockito中的@InjectMocks只注入一层深度的mock,而不是两层。

编辑:

我使用下面的代码来获取控制器的MockMVC实例

MockMvc controller;
controller = MockMvcBuilders.standaloneSetup(Controller);

共有2个答案

陆洛城
2023-03-14

你不需要那个。

模仿搜索服务就足够了,因为你知道需要做什么。

例子:

< code>doReturn(...).当(searchService)。do search(any());

在执行单元测试时,开发人员需要识别被测系统并模拟/存根所有协作者。

因此,在这种情况下,您应该为控制器和搜索服务编写单独的单元测试

另外,请阅读马丁·福勒的这篇精彩文章——嘲笑不是存根。

吕高雅
2023-03-14

你本质上想要做的是模仿一颗豆子。

在你的情况下,你必须使用@MockBean注释来模拟服务2的bean。

有关详细信息,请参阅本文。

 类似资料:
  • 如果我有一个OSGI Bundle jar中嵌套了依赖项jar,我是否需要在导入包清单中列出这些类以便使用它们?我不这么认为。 另外,我如何将这些依赖项jar添加到我的包中。我只是把它们放在根文件夹里吗?我是否需要向清单文件添加任何内容才能使用这些依赖关系?

  • 下面是演示该问题的代码。Class3具有Class2的自动生成字段,Class2具有Class1的自动生成依赖项,简单测试使用Class3获取Class1的String值。因此,在测试执行中,Class2不是空的,并被注入到Class3中,但是Class2中的Class1是空的。

  • 在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了

  • 在Android中,在预定的工作服务中注入依赖项的最佳方式是什么。我的工作服务计划在晚上运行做一些事情。 在JobService构造函数中,我试图在应用程序类上注入依赖项。 下面是我的应用程序类

  • 我有一个非常简单的rest控制器: 记录器依赖项通过以下配置注入:

  • 主要内容:1. dependOnMethods示例,2. dependsOnGroups示例有时,我们可能需要以特定顺序调用测试用例中的方法,或者可能希望在方法之间共享一些数据和状态。 TestNG支持这种依赖关系,因为它支持在测试方法之间显式依赖的声明。 TestNG允许指定依赖关系: 在注释中使用属性,或者 在注释中使用属性。 在TestNG中,我们使用和来实现依赖测试。 如果依赖方法失败,则将跳过所有后续测试方法。 为了方便演示使用,首先创建一个 Maven 项目: DependO