37

我有一个方法:

void putObject(<T extends BaseEntity> param)

在我模拟此方法的地方进行一些测试,但我想知道,如何验证该方法是使用特定类的参数调用的?试图以这样的方式做到这一点:

verify(foo).putObject((SomeClass)anyObject());
------
verify(foo).putObject(any(SomeClass.class));
------
ArgumentCaptor<SomeClass> parameter = ArgumentCaptor
            .forClass(SomeClass.class);
verify(foo).putObject(parametr);

仅适用于带有 的第二个变体any(),但它没有t check class of参数`。那么是否可以验证该方法获取特定类的任何对象?

4

2 回答 2

79

用户匹配器文档 isA()方法。

public static <T> T isA(java.lang.Class<T> clazz)

这将解决你的问题。

verify(foo).putObject(isA(SomeClass.class));

于 2013-02-08T12:12:35.610 回答
6

实际上,您可以使用 ArgumentCaptor 进行检查。

ArgumentCaptor<SomeClass> parameterCaptor = ArgumentCaptor
            .forClass(SomeClass.class);
verify(foo).putObject(parameterCaptor.capture());

SomeClass instance = parameterCaptor.getValue();
// check intance.getX()
// check instance.getY()
于 2017-02-17T09:52:32.383 回答