2015-04-22 5 views
1

Я потратил последнее немного, вытаскивая свои волосы, пытаясь найти проблему в своем тесте, и в конечном итоге понял, что это связано с издевательством метода, который принимает примитивные аргументы. Вот тестовый образец, который демки проблему:NullPointerException в 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; 

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 на verify линии:

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. Если вы можете воспроизвести это, можете ли вы получить больше информации из вашей трассировки стека?

ответ

3

Вы должны согласовани, что соответствует долго не любому объекту:

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

Я проверил, что он работает правильно.

Смежные вопросы