InjectMocks对ClassUnderTest的优势

时间:2016-12-23 09:00:12

标签: unit-testing mockito

我正在为我的服务(ClassUnderTest)课程编写单元测试。我对所有数据成员使用@Mock

现在,要测试ClassUnderTest,我需要为ClassUnderTest创建一个对象。

我有两个选择, 为ClassUnderTest创建一个新对象,并在构造函数中发送模拟。

或使用@InjectMocks的{​​{1}}注释。

我想知道,这两种方法是相同的还是使用ClassUnderTest的一些注意力好处?

@InjectMocks

@Mock
private NodeLaunchWorkflowService nodeLaunchWorkflowService;

@InjectMocks
private NodeLaunchWorkflowController nodeLaunchWorkflowController;

1 个答案:

答案 0 :(得分:1)

恰恰相反:使用构造函数模式而不是@InjectMocks有一些明显的优势。特别是,作为@InjectMocks documentationother articles,Mockito默默无法注入嘲讽的原因有很多种。这意味着看起来无辜的类更改可能会导致测试中出现模糊的失败,而不是构造函数调用会导致明显的编译失败。

使用某些自动重构工具,您甚至可以通过正确自动更改测试的方式更改课程;它不会与@InjectMocks一起使用,这会使构造函数在Mockito内反射深入。

@InjectMocks可能对遗留代码中非常快速的单元测试覆盖率很有用,但在新开发中,通常要将组件结构化为易于测试(例如使用公开的构造函数调用),然后使用它们进行测试明确的电话。