错误的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