在我的项目中Mockito. Times(1)
在验证模拟时经常使用:
verify(mock, times(1)).call();
这是多余的,因为Mockito使用隐式<code>times(1)</code>进行<code>verify(Object)</code>,因此下面的代码与上面的代码完全相同:
verify(mock).call();
所以我要写一个结构搜索驱动器检查来报告这种情况(比方说,命名为Mockito.times(1)是多余的)。由于我不是IntelliJ IDEA结构搜索方面的专家,我的第一次尝试是:
Mockito.times(1)
显然,这不是一个好的搜索模板,因为它忽略了调用点。比方说,我发现下面的代码很有用,我不希望检查被触发:
VerificationMode times = Mockito.times(1);
// ^ unwanted "Mockito.times(1) is redundant"
所以现在我想定义我希望检查触发的上下文。现在,检查搜索模板变为:
Mockito.verify($mock$, Mockito.times(1))
伟大!现在像verify(mock, times(1
)).call()这样的代码被报告得很好(如果时间
是从org.mockito.Mockito静态
导入的)。但也有一件事。Mockito.times
实际上来自其VerificationModeFactory
类,其中此类验证模式被分组,因此检查会忽略以下行:
verify(mockSupplier, VerificationModeFactory.times(1)).get();
我解决这个问题的另一个尝试是这样的:
Mockito.verify($mock$, $times$(1))
哪里:
$mock$
仍然是默认模板变量;$times$
是一个变量,其中文本/正则表达式设置为 time
,仅全字和值读取设置为 true
,表达式类型 (regexp)
设置为 (Times|验证模式)
- 至少这是我认为它应该工作的方式。不能让它工作。为什么< code>Times也包含在regexp中?这是< code>*的真正实现。times(int),所以,理想情况下,也应该报告下面一行:
verify(mockSupplier, new Times(1)).get();
当然,我可以创建所有三个检查模板,但是是否可以使用单个搜索模板来创建这样一个模板?在配置< code>$times$变量时,我遗漏了什么?
(我正在使用 IntelliJ IDEA 社区版 2016.1.1)
尝试以下搜索查询:Mockito.核实($mock$,$Qualifier$. time(1))
with < code > $ Qualifier $ text/regexp < code > VerificationModeFactory | mock ITO 且出现次数计数为0,1(也在静态导入时查找)。
要同时匹配新的 Times(1),
您可以使用以下查询:Mockito.verify($mock$, $times$)
使用 $times$
文本/正则表达式 .*times\s*\(\s*1\s*\)
并取消选中区分大小写
复选框。