java - 如何验证仅在一个测试范围内没有在模拟上调用方法?
问题描述
我知道我可以verify(mock, times(0)).methodCall()
,并且当我单独运行我的一项测试时,这很有效。问题是文件中的其他测试与此方法有交互,当我运行文件中的所有测试时,我得到一个异常org.mockito.exceptions.verification.NeverWantedButInvoked:
,因为另一个测试与模拟有交互。
有没有办法限制verify()
只计算一个测试方法范围内的交互次数,而不是计算文件中所有测试的交互?
解决方案
通常的模式是:为每个测试用例创建一个新的模拟。
以 JUnit 和 Mockito 为例,它可能看起来像这样:
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mock
Bar mockedBar;
...
这样做将为您的每个 @Test 方法创建一个新的模拟实例。当您遵循这种做法时,无需担心“交叉测试用例”调用。因为每个测试都使用其“自己的”模拟。
或者反过来:避免为多个测试“重复使用”相同的模拟对象。
并且要明确一点:模拟对象不知道那个“测试方法上下文”。他们在某个时候创建,然后发生方法调用。模拟不关心或知道这些呼叫来自“哪里”。
推荐阅读
- pandas - 对过滤后的 DataFrame 或 Series 进行切片(使用负索引切片观察到的结果)
- javascript - 如何根据 curl 请求在 Node 中发出 http post 请求?
- mysql - sql锁表多服务器一数据库
- python - How to parse and print a matching search in a line of text, plus the next 2 lines after a match in Python
- amazon-web-services - 是否可以使用无服务器离线测试 lambda 限制?
- c++ - 如何打印出 QuickSort 切换和检查的次数?
- asp.net-core - 编辑未在 URL 上传递 ID 的记录。我喜欢在编辑 GUI 的输入字段中指定 ID
- java - 如何在 Reactive Spring Data 中使用来自其他对象的引用来获取对象?
- rust - 如何安全地使用由唯一 ID 表示的外部数据?
- javascript - 使用 ReactFire 和 Express.js 加载数据时如何更新?