在我正在进行的项目中,我经常在一个领域看到@Spy并@InjectMocks一起使用.但我从未在任何教程或其他资源中看到过这种方式.我在谷歌搜索了这个特定的组合,但除了GitHub上的这个帖子之外没有找到任何其他内容:https:
//github.com/mockito/mockito/issues/169
这让我觉得我们正在以一种奇怪的方式使用它.
注意:我认为同时使用两个注释的原因有时是因为如果您只使用@InjectMocksMockito尝试使用no-args构造函数实例化该类.但是如果没有no-args构造@Spy函数并添加,则可以使用该对象而无需空构造函数.
编辑:另一个重要用途是,如果只使用两个注释,则只能存根方法.
当试图使用Spring的Mockito时,通过bean声明创建Mock对象......
<bean id="accountMapper" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="org.example.persistence.mybatis.mappers.AccountMapper" />
</bean>
Run Code Online (Sandbox Code Playgroud)
...我在调用Mockito时发现了一些奇怪的行为.多次没有重置Mock对象,例如:
Mockito.when(this.accountMapper.createBadGrammarException()).thenThrow(new BadSqlGrammarException("Bla", null, new SQLException()));
Run Code Online (Sandbox Code Playgroud)
一旦在测试期间(在同一模拟器上)多次调用此代码("Mockito.when"),测试就会失败并出现错误(BadSqlGrammerException,即使此异常是实际预期的 - 我确实失败了如果我不抛出异常,并手动抛出它工作正常).这是预期的行为吗?Mockito似乎建议每次创建一个新的模拟,这意味着为每个方法创建DAO ......?
当我两次调用Mockito.when方法时到底发生了什么?模拟应该如何反应?替换行为?忽略它?不幸的是,大多数搜索仅产生如何为方法本身的多次调用返回不同结果的结果,但不会产生多次调用Mockito所期望的结果.当...
我只是想在这里了解Mockito和最佳实践,因为只是因为它看起来很有效,所以选择一些东西似乎是一个坏主意......