Простые проверки Mockito работают в JUnit, но не Spock - программирование
Подтвердить что ты не робот

Простые проверки Mockito работают в JUnit, но не Spock

Используя самый простой пример из страницы примеров Mockito, я могу успешно работать в JUnit.

Однако, когда я запускаю тот же тест в Споке, он терпит неудачу.

версия JUnit/Java (это проходит):

import org.junit.Test;

import java.util.List;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class SimpleJunitTest
{
    @Test
    public void basicMockTest()
    {
        List mockedList = mock(List.class);

        //using mock object
        mockedList.add("one");
        mockedList.clear();

        //verification
        verify(mockedList).add("one");
        verify(mockedList).clear();
    }
}

версия Spock/ Groovy (это не удается):

import static org.mockito.Mockito.mock
import static org.mockito.Mockito.verify


class SimpleSpockTest extends spock.lang.Specification
{
    def "Basic Mock Test"()
    {
        given:
            //mock creation
            List mockedList = mock(List.class);

        when:
            //using mock object
            mockedList.add("one");
            mockedList.clear();

        then:
            //verification
            verify(mockedList).add("one");
            verify(mockedList).clear();
    }

}

Вот ошибка, которую я получаю, когда сбой теста Spock:

Condition not satisfied:

verify(mockedList).add("one")
|      |           |
|      |           false
|      [email protected] (renderer threw    
NullPointerException)
[email protected] (renderer threw 
NullPointerException)

at SimpleSpockTest.Basic Mock Test(SimpleSpockTest.groovy:25)

Любые идеи или предложения? Мне очень нравятся Спок и Мокито, и я надеюсь, что они будут хорошо работать вместе. Большое вам спасибо!

4b9b3361

Ответ 1

Грубо говоря, тогдашний блок может содержать только утверждения в виде булевых выражений. Выражение проверки Mockito не соответствует этому контракту, так как оно возвращает значение фальши (null, false, 0), которое интерпретируется как неудавшееся утверждение Spock.

Чтобы решить эту проблему, вы можете написать вспомогательный метод, который обертывает выражения проверки и всегда возвращает true, или вы можете использовать встроенную фальшивую фреймворк Spock вместо Mockito.