2011-06-20 103 views
2
Foo mockFoo1 = mock(Foo.class); 
Foo mockFoo2 = mock(Foo.class); 
when(((Foo) any()).someMethod()).thenReturn("Hello"); 

在上面的示例代碼中,第3行失敗並出現NullPointerException。爲什麼這樣?使用Matchers.any()來匹配模擬對象

我的想法對這個:

無論是.. any()應該用於匹配參數,而不是其方法是觸發的對象匹配。

OR .. any()僅適用於真實的具體物體而不適用於mock物體。

回答

7

你需要做的:

Foo mockFoo1 = mock(Foo.class); 
Foo mockFoo2 = mock(Foo.class); 
when(mockFoo1).someMethod().thenReturn("Hello"); 
when(mockFoo2).someMethod().thenReturn("Hello"); 

任何()(短別名anyObject())是的Mockito參數匹配任何匹配的說法,只有如下應使用:

when(mockFoo1.someMethod(any())).thenReturn("Hello"); 

任何()返回null,所以你的代碼等同於

when(((Foo) null).someMethod()).thenReturn("Hello"); 
+0

這個答案似乎從3日一個無與倫比的括號受苦第四行。與完美解決方案的區別僅在於2個字符,所以我無法對其進行編輯。你能糾正它嗎?謝謝! – elias