如何使用参数“T value”模拟方法?

3
我有以下方法:

我有这样的一个方法:

<T extends Entity> boolean putObject(T value);

但是不知道如何使用mockito进行模拟? anyObject()和any()会产生错误:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
1 matchers expected, 3 recorded.

Mock:

when(service.putObject(any(ProcessingTransaction.class))).thenReturn(true);

它应该如何工作?
1个回答

3
很可能,在您的测试中(甚至是之前的测试中)存在一两个未正确形成的Mockito方法调用。当您调用生成参数匹配器的Mockito方法时(例如any()),该匹配器会被添加到内部数据结构中。然后在实际使用时删除它。
Mockito发现三个参数匹配器而不仅仅是一个,这表明您创建了一些参数匹配器,但并没有使用它们。例如,如果您使用when(...)而不使用thenReturn(),那么就会发生这种情况;但也有许多其他情况。
如果您想找到究竟哪里出了问题,您需要发布更多的测试代码以获取帮助。

是的,没错。我在代码中发现了一个错误:attributes.put(anyString(), Serializator.toJson(anyObject())); 因此,在没有when的情况下使用这些匹配器会导致错误。David,感谢你如此深入的回答。 - sphinks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接