Mockito - конструктор mock возвращает нулевой объект, даже если используется return_self - PullRequest
0 голосов
/ 21 января 2019

Я создал тест для уведомлений в Android и борюсь с созданием фиктивных объектов. Когда я пытаюсь смоделировать notificationBuilder следующий этот пост (который предлагает обернуть уведомления Android в пользовательский класс) , я получаю ноль notificationBuilder, который затем разрушает мои тесты.

Мой минимальный код, показывающий это:

@Before
public void setUp() {
    NotificationCompat.Builder notificationBuilder = Mockito.mock(NotificationCompat.Builder.class, Mockito.RETURNS_SELF);
}

, где NotificationBuilder является нулевым. Как я могу получить Mock NotificationCompat.Builder в качестве возвращаемого значения? Я думал, что это то, что RETURNS_SELF должен был сделать.

С нулевым значением я не могу использовать свой Builder как часть элемента when (). Then () для дальнейшего тестирования.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Проблема в том, что вы создаете макет, который в конце концов является локальной переменной внутри метода @Before.

Когда вы позже запустите свои тесты, эта переменная больше не будет доступна, и не будет никакого понятия о глобальном макете для класса (по крайней мере, в ванильном Mockito).

Так что либо используйте глобальную переменную, которую вы затем инициализируете вручную в методе setUp:

private NotificationCompat.Builder notificationBuilder;

@Before
public void setUp() {
   notificationBuilder = Mockito.mock(NotificationCompat.Builder.class);
}

или используйте аннотации Mockito:

@Mock
private NotificationCompat.Builder notificationBuilder;

@Before
public void setUp() {
   MockitoAnnotations.initMocks(this);
}
0 голосов
/ 21 января 2019

Mockito.mock(...) возвращает null, потому что вы ничего не дразните. Вам необходимо объявить глобальную переменную с аннотацией @Mock и инициализировать ваш фиктивный объект в методе setUp() (вы можете вызывать это как угодно, если в нем есть аннотация @Before). Попробуйте приведенный ниже фрагмент кода.

    @Mock
    NotificationCompat.Builder notificationBuilder;

    @Before
    public void setUp(){
        notificationBuilder = Mockito.mock(NotificationCompat.Builder
                .class);

    }
   @Test
    public void testSharedPrefInjection(){

        assertNotNull(notificationBuilder);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...