注射剂的优势用于classundertest



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

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

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

或使用 @InjectMocksClassUnderTest

我想知道,这两种方法是相同的还是使用@InjectMocks

的注意力好处
@Mock
private NodeLaunchWorkflowService nodeLaunchWorkflowService;
@InjectMocks
private NodeLaunchWorkflowController nodeLaunchWorkflowController;

@Mock
private NodeLaunchWorkflowService nodeLaunchWorkflowService;
private NodeLaunchWorkflowController nodeLaunchWorkflowController; 
@Before
public void setUp() throws JSONException {
    MockitoAnnotations.initMocks(this);
    nodeLaunchWorkflowController = new NodeLaunchWorkflowController(nodeLaunchWorkflowService)
}

恰恰相反:使用构造函数模式而不是@InjectMocks有明显的优势。特别是,作为@InjectMocks文档和其他文章,Mockito会默默地未能注入模拟的原因有很多。这意味着,看起来无辜的阶级变化可能会导致您的测试中的晦涩失败,而不是构造函数呼叫会导致的明显汇编失败。

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

@InjectMocks对于旧版代码中的非常快速的单元测试覆盖范围可能很有用,但是在新开发中,构造组件易于测试的组件(例如,使用暴露的构造函数)更好,然后使用它们进行测试清除电话。

相关内容

  • 没有找到相关文章

最新更新