我在工作测试中有以下内容:
when(client.callApi(anyString(), isA(Office.class))).thenReturn(responseOne);
请注意,client是类Client的Mock。
我想更改“isA(Office.class)”,告诉它匹配Office示例的“id”属性为“123L”的位置。如何指定在模拟对象的方法中需要特定的参数值?
编辑:不是重复的,因为我试图在“when”上使用它,而链接的问题(以及我找到的其他资源)在“verify”和“assert”上使用ArgumentCaptor和ArgumentMatcher。我想我实际上不能做我正在尝试的事情,我将尝试另一种方式。当然,我愿意以其他方式显示。
3条答案
按热度按时间njthzxwz1#
按要求重新打开,但解决方案(使用ArgumentMatcher)与the one in the linked answer相同。当然,在存根时不能使用
ArgumentCaptor
,但其他一切都是一样的。因为ArgumentMatcher只有一个方法,所以您甚至可以在Java8中将其设置为lambda:
如果您已经在使用Hamcrest,则可以使用
MockitoHamcrest.argThat
适配Hamcrest匹配器,或者使用内置的hasProperty
:bbmckpt72#
我最终选择了"eq"。在这种情况下这是可以的,因为对象非常简单。首先我创建了一个对象,它与我期望得到的相同。
然后我的"何时"语句变成:
这使我能够比"isA(Office.class)"进行更好的检查。
nwwlzxa73#
为拥有更复杂物体的人添加一个答案。
OP中的答案使用eq,它适用于简单对象。
然而,我有一个更复杂的对象,有更多的字段。创建Mock对象并填充所有字段是相当痛苦的
我能够使用refEq来实现同样的事情,而不需要设置每个字段的值。