![](/img/trans.png)
[英]Mockito, how to verify if the method of the tested class was called?
[英]Is it possible to verify tested object method call with Mockito?
我有一些业务逻辑课:
public class SomeService {
public void doFirst() {}
public void doSecond() {
doFirst();
}
}
并测试:
public class SomeServiceTest {
private SomeService service;
@Before
public void setUp() {
service = new SomeService();
}
@Test
public void doSecond_someCondition_shouldCallFirst() {
// given
...
// when
service.doSecond();
//then
how to verify doFirst() was called?
}
}
如何验证doFirst()不是在模拟中调用,而是在真实服务中调用?
我想知道为什么要测试,被测方法调用什么方法。 听起来很像白盒测试。
在我看来,您想验证调用的结果而不是验证到达结果的方法,因为这很容易改变(即在重构时)。
因此,如果doSecond()的结果与doFirst()相同,则可以为doFirst()编写一个测试,并使用相同的测试(即一组断言)来测试doSecond()。
但是,如果您真的要测试,则doSecond()是否已调用doFirst(),则可以将服务包装在间谍程序中,然后在间谍程序上调用验证:
//given
SomeService service = new SomeService();
SomeService spy = Mockito.spy(service);
//when
spy.doSecond();
//then
verify(spy).doFirst();
听起来您想避免在测试中调用真正的doFirst吗? 如果是这样,请尝试...
//given
boolean firstCalled = false;
SomeService fakeService = new SomeService {
@Override
public void doFirst() {
firstCalled = true;
}
}
//when
fakeService.doSecond();
// then
assertTrue(firstCalled);
出于明显的原因,这种测试/模拟技术被称为“子类和替代”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.