多层次@Mock和@InjectMocks

2022-08-31 15:55:04

所以我明白,在Mockito中,@InjectMocks会注入任何可以添加@Mock注释的东西,但是如何处理这种情况呢?

@Mock
private MockObject1 mockObject1;

@Mock
private MockObject2 mockObject2;

@InjectMocks
private SystemUnderTest systemUnderTest = new SystemUnderTest();

假设 MockObject2 具有一个类型为 MockObject1 的属性,而 SystemUnderTest 具有一个类型为 MockObject2 的属性。我想将 mockObject1 注入 mockObject2,并将 mockObject2 注入 systemUnderTest。

这可以通过注释来实现吗?


答案 1

由于我在这里没有得到任何回应,我在Mockito论坛上询问。以下是讨论的链接:https://groups.google.com/d/topic/mockito/hWwcI5UHFi0/discussion

总结一下答案,从技术上讲,这将破坏嘲笑的目的。您实际上应该只模拟 SystemUnderTest 类所需的对象。嘲笑本身就是嘲笑的对象中的事物是毫无意义的。

如果你真的想这样做,@spy可以提供帮助


答案 2

通过将@Spy与@InjectMocks相结合是可能的。对于您的示例,它将是:

@Spy
private MockObject1 mockObject1 = new MockObject1 ();

@Spy @InjectMocks //if MockObject2 has a MockObject1, then it will be injected here.
private MockObject2 mockObject2 = new MockObject2 ();

@InjectMocks
private SystemUnderTest systemUnderTest;

推荐