Mockito:拦截任何返回类型的方法

时间:2017-06-05 14:01:51

标签: mockito

我有这样的界面:

public interface ICustomer extends IEnd<Customer> {
    String getId();
    ICustomer id(String id);
    ICustomer email(String email);
    ICustomer description(String description);
}

无论参数如何,我都需要模拟任何返回ICustomer的方法。

调用这些方法时,必须返回名为ICustomer的自我。

有什么想法吗?

1 个答案:

答案 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