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());
    
    我检查了它是否运行正常