我正在为我的服务(ClassUnderTest
)课程编写单元测试。我对所有数据成员使用@Mock
。
现在,要测试ClassUnderTest
,我需要为ClassUnderTest
创建一个对象。
我有两个选择,
为ClassUnderTest
创建一个新对象,并在构造函数中发送模拟。
或使用@InjectMocks
的{{1}}注释。
我想知道,这两种方法是相同的还是使用ClassUnderTest
的一些注意力好处?
@InjectMocks
或
@Mock
private NodeLaunchWorkflowService nodeLaunchWorkflowService;
@InjectMocks
private NodeLaunchWorkflowController nodeLaunchWorkflowController;
答案 0 :(得分:1)
恰恰相反:使用构造函数模式而不是@InjectMocks
有一些明显的优势。特别是,作为@InjectMocks documentation和other articles,Mockito默默无法注入嘲讽的原因有很多种。这意味着看起来无辜的类更改可能会导致测试中出现模糊的失败,而不是构造函数调用会导致明显的编译失败。
使用某些自动重构工具,您甚至可以通过正确自动更改测试的方式更改课程;它不会与@InjectMocks一起使用,这会使构造函数在Mockito内反射深入。
@InjectMocks可能对遗留代码中非常快速的单元测试覆盖率很有用,但在新开发中,通常要将组件结构化为易于测试(例如使用公开的构造函数调用),然后使用它们进行测试明确的电话。