使用 mockito 验证对象属性值

2022-08-31 05:01:11

我有一个方法调用,我想用mojito来嘲笑它。首先,我已经创建并注入了一个对象的实例,将在其上调用该方法。我的目标是验证方法调用中的一个对象。

有没有办法让 mockito 允许您断言或验证对象及其在调用 mock 方法时的属性?

Mockito.verify(mockedObject)
       .someMethodOnMockedObject(
              Mockito.<SomeObjectAsArgument>anyObject())

而不是做,我想检查参数对象是否包含一些特定的字段anyObject()

Mockito.verify(mockedObject)
       .someMethodOnMockedObject(
              Mockito.<SomeObjectAsArgument>**compareWithThisObject()**)

答案 1

Mockito添加的新功能使这变得更加容易,

ArgumentCaptor<Person> argument = ArgumentCaptor.forClass(Person.class);
verify(mock).doSomething(argument.capture());
assertEquals("John", argument.getValue().getName());

查看 Mockito 文档


如果有多个参数,并且只需要捕获单个参数,请使用其他 ArgumentMatchers 来包装其余参数:

verify(mock).doSomething(eq(someValue), eq(someOtherValue), argument.capture());
assertEquals("John", argument.getValue().getName());

答案 2

我认为验证参数对象的最简单方法是使用以下方法:refEq

Mockito.verify(mockedObject).someMethodOnMockedObject(ArgumentMatchers.refEq(objectToCompareWith));

即使对象没有实现,也可以使用它,因为使用了反射。如果不想比较某些字段,只需添加其名称作为 的参数即可。equals()refEq


推荐