希望但不被调用:但是,此模拟还有其他交互作用:
这是一个试图验证特定方法对某个对象的调用时会捕获的模拟错误,但是发生的是您已与该对象的其他方法进行了交互,但没有提到。如果您有一个名为CustomerService的对象,并说它有两个名为saveCustomer()和verifyExistingCustomer()的方法,并且您的模拟对象看起来类似于verify(customerService,atleast(1))。verifyExistingCustomer(customer),但是在您的实际服务中您调用了saveCustomer()至少一个。
任何想法如何解决这个问题?
从您所描述的内容来看,您似乎在告诉模拟对象您希望verifyExistingCustomer()被调用,但实际上并未调用它。
您可能应该查看测试设计,尤其要确保可以(通过模拟)隔离测试以分别测试每种方法。
如果有东西在你的代码,决定是否通话saveCustomer()还是verifyExistingCustomer()那么你应该尝试嘲笑数据,代码检查,这样就可以单独测试每个。
例如,如果您的代码如下所示:
if (customer.getId() == 0) {
saveCustomer(customer);
} else {
verifyExistingCustomer(customer);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过为客户中的id设置零值和非零值来隔离两个单独的测试。
如果您想分享您的代码,我可能会给您一个更好的例子。