Java 使用基元参数模拟方法时Mockito中的NullPointerException
我花了最后一点时间在我的测试中找出问题所在,并最终发现这与模拟一个采用原始参数的方法有关。下面是一个演示问题的示例测试:Java 使用基元参数模拟方法时Mockito中的NullPointerException,java,unit-testing,mockito,Java,Unit Testing,Mockito,我花了最后一点时间在我的测试中找出问题所在,并最终发现这与模拟一个采用原始参数的方法有关。下面是一个演示问题的示例测试: import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import org.junit.Test; p
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Test;
public class MockitoTest {
public static interface Foo {
public Object causeProblems(long arg);
}
@Test
public void testFoo() {
Foo foo = mock(Foo.class);
foo.causeProblems(123);
verify(foo, times(1)).causeProblems(any());
}
}
运行此测试时(我使用的是Mockito 1.10和Java8),出于某种原因,我的堆栈跟踪在验证行上显示NPE:
java.lang.NullPointerException
at com.amazon.jetstream.executor.worker.invoke.MockitoTest.testFoo(MockitoTest.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
....
我认为我的堆栈跟踪的一部分被抑制了(?)再深入一点,如果我在Eclipse中运行它并“检查”该行,我可以从中获得更多的信息,这简单地告诉我:
java.lang.NullPointerException at longValue()
问题:
有人知道如何解决这个错误吗李>
如果你能重现这一点,你能从堆栈跟踪中获得更多信息吗
您应该使用匹配长而不是任何对象的匹配器:
verify(foo, times(1)).causeProblems(anyLong());
我检查了它是否运行正常