錯誤的Mockito我有一個Java類:定製匹配
import java.util.List;
public class Service
{
public List<Object> someMethod(final List<Object> list) {
return null;
}
}
而且在那裏我已經定義了自定義匹配一個斯波克測試:
進口org.mockito.ArgumentMatcher 進口spock.lang。規格
import static org.mockito.Mockito.*
class InstantBookingInitialDecisionTest extends Specification {
def mock = mock(Service.class)
def setup() {
when(mock.someMethod(argThat(hasSize(2)))).thenReturn([])
when(mock.someMethod(argThat(hasSize(3)))).thenReturn([])
}
def 'Minimum hunger requirements do not apply to schedulable pros'() {
when:
'something'
then:
'something else'
}
// Damn, there's a Hamcrest matcher for this, but it's not in the jar that the javadocs say it is, so making my own
static def hasSize(size) {
new ArgumentMatcher<List>() {
@Override
boolean matches(Object o) {
List list = (List) o
return list.size() == size
}
}
}
}
原樣,這個測試使我有以下錯誤:
java.lang.NullPointerException: Cannot invoke method size() on null object
如果我刪除when
中的任何一個,我就不會有任何錯誤。所以它不喜歡的是測試的殘段,以及我使用了自定義匹配器兩次的事實。
注:
- 我試圖聲明爲每個列表大小一個單獨的類,如mockito anyList of a given size和文檔的Mockito。我犯了同樣的錯誤。
- 我試過使用看起來像這樣的Hamcrest匹配器,但儘管1.3 Javadoc列出了一個Matchers.hasSize()方法,但我的導入的1.3 jar不包含匹配器。 (但即使我得到了依賴解決,我仍然想要了解問題。)
請不要問爲什麼我使用Mockito而不是Spock Mocks - 我有我的理由。 ;)
謝謝
如果matches()檢查null併爲null參數返回false(因爲它應該這樣做,IMO)會發生什麼 –
我正在使用Mockito文檔(基本上)的示例,它不檢查null。 – orbfish