[英]NullPointerException in Mockito when mocking method with primitive argument
I've spent the last little while pulling out my hair trying to find the problem in my test, and eventually figured out it has to do with mocking a method that takes primitive arguments. 我花了最后一点时间拔出我的头发试图在我的测试中找到问题,并最终发现它与模拟一个采用原始参数的方法有关。 Here's a sample test that demos the problem: 这是一个演示问题的示例测试:
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());
}
}
When running this test (I'm using Mockito 1.10 and Java8), and for some reason my stack trace is showing an NPE on the verify
line: 运行此测试时(我正在使用Mockito 1.10和Java8),由于某种原因,我的堆栈跟踪在verify
行上显示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)
....
I think part of my stack trace is being suppressed (?) Digging into it a bit further, I can get slightly more info out of it if I run it in Eclipse and "inspect" the line, which tells me simply: 我认为我的堆栈跟踪的一部分正在被抑制(?)进一步深入研究它,如果我在Eclipse中运行它并“检查”该行,我可以从中获得更多信息,这简单地告诉我:
java.lang.NullPointerException at longValue()
Questions: 问题:
You should matcher that matches long not any object: 你应该匹配长而不是任何对象的匹配器:
verify(foo, times(1)).causeProblems(anyLong());
I checked that it runs correctly. 我检查它运行正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.