簡體   English   中英

當使用原始參數模擬方法時,Mockito中的NullPointerException

[英]NullPointerException in Mockito when mocking method with primitive argument

我花了最后一點時間拔出我的頭發試圖在我的測試中找到問題,並最終發現它與模擬一個采用原始參數的方法有關。 這是一個演示問題的示例測試:

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),由於某種原因,我的堆棧跟蹤在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)
....

我認為我的堆棧跟蹤的一部分正在被抑制(?)進一步深入研究它,如果我在Eclipse中運行它並“檢查”該行,我可以從中獲得更多信息,這簡單地告訴我:

java.lang.NullPointerException at longValue()

問題:

  1. 有誰知道如何解決這個錯誤?
  2. 如果您可以重現這一點,您可以從堆棧跟蹤中獲得更多信息嗎?

你應該匹配長而不是任何對象的匹配器:

verify(foo, times(1)).causeProblems(anyLong());

我檢查它運行正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM