在我的项目Mockito.times(1)
中验证模拟时经常使用:
verify(mock, times(1)).call();
这是多余的,因为 Mockito 使用隐式times(1)
for verify(Object)
,因此以下代码与上面的代码完全相同:
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()
报告的代码很好(如果times
是从静态导入的org.mockito.Mockito
)。但还有一件事。Mockito.times
实际上来自对VerificationModeFactory
此类验证模式进行分组的类,因此检查忽略了以下行:
verify(mockSupplier, VerificationModeFactory.times(1)).get();
我修复这个问题的另一种尝试是:
Mockito.verify($mock$, $times$(1))
在哪里:
$mock$
仍然是默认模板变量;$times$
是一个变量,其中Text/regexp设置为times
,Whole words only和Value is read设置为true
,并且Expression type (regexp)
设置为(Times|VerificationMode)
- 至少这是我认为它应该工作的方式。
不能让它工作。为什么Times
也包含在正则表达式中?这是 的真正实现*.times(int)
,因此,理想情况下,也应该报告以下行:
verify(mockSupplier, new Times(1)).get();
当然,我可以创建所有三个检查模板,但是是否可以使用单个搜索模板创建这样的模板?配置$times$
变量时我缺少什么?
(我使用的是 IntelliJ IDEA 社区版 2016.1.1)