【发布时间】:2016-02-08 04:51:42
【问题描述】:
我经常看到验证的方法与 Mockito 中被模拟的方法相同(示例如下)。在这些情况下拨打Mockito.verify() 有什么额外的好处吗?
//mock method
FooService fs = mock(FooService.class);
when(fs.getFoo()).thenReturn("foo");
//method under test
fs.doSomething();
//verify method
verify(fs).getFoo();
如果没有调用fs.getFoo(),该方法应该会失败。那么为什么要打电话给verify?如果您需要在验证中使用ArgumentCaptor 来断言参数,我看到了好处;除了 ArgumentCaptor 案例,它只是不必要的吗?
【问题讨论】:
-
我会说这是必要的,因为如果您突然将您的
doSomething()更改为不再调用getFoo()或只是评论它怎么办?如果您还没有验证方法调用,您将如何知道这一点。 -
@TajAhmed 如果不执行
verify()就没有调用模拟方法,难道没有办法使测试失败吗? -
当您在测试类方法中使用模拟方法的输出时,这是可能的。然后,您可以通过断言返回值来验证模拟数据是否已准备好。根据您的测试方法是否返回任何值,这样做可能/可能不可能。所以我建议使用 verify 来保证方法被调用。
-
我认为
Mockito.when应该使用术语“存根”而不是“模拟”(参见docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#2)。
标签: java unit-testing mockito