我正在尝试为我正在测试的另一个方法中使用的方法设置一个when语句。在我测试的方法内部我正在创建一个我没有引用的列表,因此我无法模拟它。当我在上面提到的方法中使用它时,我想验证这个列表的内容。我已经使用以下作为when方法的一部分,但在每种情况下都以“InvalidUseOfMatchersException”结束。我错过了什么?
Matchers.eq(mockKeys) //mockKeys is a List<String> with expected contents
Matchers.anyListOf(String.class)
Mockito.when(myDaoImpl.getRecords([either of the above])).thenReturn(mockResult);
我必须拒绝提供准确的代码。
答案 0 :(得分:1)
List<String> mockKeys = createMockKeys(); // defined elsewhere
when(myDaoImpl.getRecords(Matchers.eq(mockKeys))).thenReturn(mockResult);
when(myDaoImpl.getRecords(mockKeys)).thenReturn(mockResult); // implicitly equal
when(myDaoImpl.getRecords(Matchers.anyListOf(String.class)))
.thenReturn(mockResult);
以上所有都很好。你发布的任何内容都看起来本身就是错误的;它更可能是我们看不到的问题,例如getRecords
是最终的,还是使用围绕代码的Mockito或Matchers。虽然不能发布比你更多的代码是可以理解的,但可能很难提供更具体的答案。
为了调试,请在存根之前和之后拨打Mockito.validateMockitoUsage()
。这将有助于确保问题实际上是您认为的问题,而不是来自之前或之后的呼叫造成的污染。
答案 1 :(得分:0)
您的问题是两行Matchers.eq(mockKeys);
和Matchers.anyListOf(String.class)
。正如消息所说,你无效地使用它们。
当您调用此类方法时,Mockito使用自己的数据结构来存储匹配器,但返回与实际调用不同的值。必须将该附加值传递给您正在存根的方法(在这种情况下为getRecords
),当您存根时,Mockito将从数据结构中检索实际的匹配器。
除非你完全理解数据结构是如何工作的,并且知道完全你正在做什么,否则你真的需要调用Matchers
方法调用{ {1}}。例如,
getRecords