的Mockito.验证方法参数是否为特定类

sph*_*nks 32 java unit-testing mockito

我有一个方法:

void putObject(<T extends BaseEntity> param)
Run Code Online (Sandbox Code Playgroud)

有一些测试,我嘲笑这个方法,但我想知道,如何验证该方法是否被特定类的参数调用?试图以这样的方式做到:

verify(foo).putObject((SomeClass)anyObject());
------
verify(foo).putObject(any(SomeClass.class));
------
ArgumentCaptor<SomeClass> parameter = ArgumentCaptor
            .forClass(SomeClass.class);
verify(foo).putObject(parametr);
Run Code Online (Sandbox Code Playgroud)

仅使用第二个变体any(),但它不t check class of参数` .那么,如果有可能验证该方法获得特定类的任何对象?

The*_*bit 70

用户匹配文档 是A()方法.

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

这将解决您的问题.

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


utk*_*mez 5

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

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

SomeClass instance = parameterCaptor.getValue();
// check intance.getX()
// check instance.getY()
Run Code Online (Sandbox Code Playgroud)