java - Mockito 验证与添加到线程本地侦听器的已创建模拟的交互
问题描述
在每次测试后,我使用 mockito 来验证与我的 mock 的交互次数。有些测试可能有很多模拟,所以为了避免在调用时出现长长的参数列表,Mockito.verifyNoMoreInteractions
我尝试通过Mockito.framework().addListener
.
我的测试班
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MyClass.class, MockitoConfig.class})
@SpringBootTest
public class MyClassTest {
@Autowired
private MyClass myClass;
@Autowired
private MockCollector mockCollector;
@MockBean
private MyMock myMock;
@After
public void after() {
verifyNoMoreInteractions(mockCollector.getMocks().toArray());
}
@Test
...
}
我的配置类
@Configuration
public class MockitoConfig {
@Bean
public MockCollector mockCollector() {
return new MockCollector();
}
public class MockCollector {
private final List<Object> createdMocks = new ArrayList<>();
public List<Object> getMocks() {
return createdMocks;
}
public MockCollector() {
Mockito.framework().addListener((MockCreationListener) (mock, settings) -> createdMocks.add(mock));
}
}
}
我创建了这个配置类,所以整个 addListener 只调用一次以避免任何RedundantListenerException
.
这里的问题是,当在方法中查询时,我的模拟列表是空的after
。当我直接在after
方法中移动 MockCollector 的代码时,它在第一次测试中效果很好,并且在第二次测试之后显然失败了,因为RedundantListenerException
.
我在这里想念什么?还有另一种方法可以在这里执行我想要的吗?
解决方案
推荐阅读
- java - 如何找到在找到排序数组列表之前或之后输入的所有数字的总和?
- windows - 如何通过 premake5 向生成的 Visual Studio 项目和解决方案添加全局属性?
- url - 如何自动接受“在
" 在 iOS 模拟器中提示? - laravel - 版本功能不适用于 Laravel Mix 中的 JS 文件
- javascript - 使用 addEventListener 添加带参数的回调时出现问题
- r - 如何根据类提取非因子列的唯一值
- javascript - 为什么我不能将 javascript 附加到我的 html 中?
- c++ - 比较对象的代码实际上是如何工作的?
- javascript - 从微信小程序发送消息到网页视图
- mysql - MariaDB 上的 TRUNCATE 表刚刚开始挂起