我有这样的界面:
public interface ICustomer extends IEnd<Customer> {
String getId();
ICustomer id(String id);
ICustomer email(String email);
ICustomer description(String description);
}
无论参数如何,我都需要模拟任何返回ICustomer
的方法。
调用这些方法时,必须返回名为ICustomer
的自我。
有什么想法吗?
答案 0 :(得分:0)
要执行此操作,您需要一个自定义的答案类:
public class CustomerAnswer implements Answer {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Class retType = invocation.getMethod().getReturnType();
if (ICustomer.class.isInstance(retType)) {
return invocation.getMock();
}
// provide default logic here -- override with "when()" calls.
return null;
}
}
然后创建模拟,指定默认行为:
Foo mockCustomer = mock(ICustomer.class, new CustomerAnswer());
为需要存根的其他方法添加when()
语句。
但正如我在OP中所评论的那样,确保你真的想在你遇到麻烦之前先嘲笑这个课程。只有模拟它才能使测试代码更简单。如果你有一个简单的接口实现,它只是一个带有流畅API的POJO(没有副作用,没有复杂的依赖或注入),可能没有必要去模拟它。而是使用真实实例,因为真实实例已经返回原始对象。
如果您需要在ICustomer对象上verify()
,请使用ICustomer实际实例的@Spy
。