莫基托。验证方法参数是否为特定类

2022-09-01 02:57:04

我有一个方法:

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


答案 1

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

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

这将解决您的问题。

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


答案 2

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

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

SomeClass instance = parameterCaptor.getValue();
// check intance.getX()
// check instance.getY()

推荐