Spring注入模拟对象,然后将结果对象注入另一个类

时间:2016-09-01 13:11:59

标签: spring dependency-injection cucumber mockito integration-testing

我觉得这应该是可能的而且不是太困难,但我无法找到类似的情况,我尝试过的任何事情都没有成功。情况如下:

我正在使用cucmber-jvm,spring,Mockito写黄瓜测试。我有三个类(A,B,C),一个是端点(C类),它处理一些数据库调用,最后我会嘲笑,另外两个相互依赖(我很快就会更清楚) )我使用依赖注入而不是setter方法。因此,目标是模拟C类并将其注入B类(简单易用)。现在我想用嵌入式C类模拟得到结果的B类并将其注入A类。这就是我被卡住的地方。

<table border="0" cellpadding="0" cellspacing="0" dir="ltr">
    <tr>
        <td style="border-top: 1px solid #ffffff;">
            content
        </td>
    </tr>
</table>

所以我有我的基本类,将A和B中的A注入到C中,这在部署中运行良好。我想要做的是如下:

    Class A () {
      function doStuff() {}
    }

    Class B () {
      @Inject
      A a;

      function doThingsWithClassA() {}
    }

    Class C () {
      @Inject
      B b;

      function doThingsWithClassB() {
        b.DoThingsWithClassA();
      }
    }  

然后能够进行我的测试。因此,确保当我调用c.doThingWithClassB时,它使用注入的类b,以便在该方法中调用b.doThingsWithClassA时,它会命中模拟对象。这样我就可以简单地使用when(a.doStuff())。thenReturn(Insert_Pre_Populated_Object_Here),然后未模拟的类B和C可以按预期执行它们的功能。

我尝试过以各种方式注入,自动装配(虽然我认为这不合适),并在cucumber.xml中创建bean。

我不想模仿B类,因为这会破坏测试的目的。这个项目的黄瓜需要这些测试。我已经对所有东西进行了单元测试,因此放下黄瓜不是一个选择。

感谢您寻求帮助的任何帮助或指示。

0 个答案:

没有答案