-2

我正在尝试为我正在测试的另一个方法中使用的方法设置一个 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);

我必须拒绝提供确切的代码。

4

2 回答 2

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);

以上都很好。您发布的任何内容看起来都没有本质上的错误;这更有可能是我们看不到的问题,例如 if getRecordsis final,或者在您的代码周围使用了 Mockito 或 Matchers。尽管不能发布比您更多的代码是可以理解的,但这可能会使提供更具体的答案变得困难。

为了调试,请Mockito.validateMockitoUsage()在存根之前和之后调用。这将有助于确保问题实际上就在您认为的线路上,而不是之前或之后的呼叫造成的污染。

于 2013-11-12T22:36:30.857 回答
0

你的问题是两条线Matchers.eq(mockKeys);Matchers.anyListOf(String.class). 正如消息所说,您正在无效地使用它们。

当您调用此类方法时,Mockito 使用自己的数据结构来存储匹配器,但返回的值与实际调用不同。该附加值必须传递给您正在存根的方法(getRecords在这种情况下),并且当您存根时,Mockito 从数据结构中检索实际的匹配器。

除非您完全了解数据结构的工作原理,并且确切地知道自己在做什么,否则您确实需要将对这两个Matchers方法的调用放在对getRecords. 例如,

when(myDaoImpl.getRecords(eq(mockKeys), anyListOf(String.class))).thenReturn(mockResult);
于 2013-11-13T05:02:56.540 回答