проверка порядка вызова нескольких методов с использованием Mockito - PullRequest
3 голосов
/ 27 июня 2019

У меня есть класс Person, у которого есть два значения: возраст и имя. Я провожу несколько тестов с использованием Mockito для целей обучения.

Мой метод тестирования выглядит следующим образом:

        @Test()
        public void testFive(){
            Person mockedPerson = Mockito.mock(Person.class);
            Mockito.when(mockedPerson.getAge()).thenReturn(1,2,3);
            Mockito.when(mockedPerson.getName()).thenReturn("1","2","3");

            InOrder inOrder = Mockito.inOrder(mockedPerson);

            mockedPerson.getAge();
            mockedPerson.getAge();
            mockedPerson.getAge();

            mockedPerson.getName();
            mockedPerson.getName();
            mockedPerson.getName();

            inOrder.verify(mockedPerson).getAge();
            inOrder.verify(mockedPerson).getAge();
            inOrder.verify(mockedPerson).getAge();
            inOrder.verify(mockedPerson).getName();
            inOrder.verify(mockedPerson).getName();
            inOrder.verify(mockedPerson).getName();
        }

Мне нужно проверить, что метод getAge () вызывался три раза, а затем три вызова метода getName ().

Я получаю это исключение:

org.mockito.exceptions.verification.VerificationInOrderFailure: Проверка при сбое заказа: person.getAge ();Разыскивается 1 раз:

1 Ответ

3 голосов
/ 27 июня 2019

Ваши проверки должны быть такими:

        inOrder.verify(mockedPerson, times(3)).getAge();
        inOrder.verify(mockedPerson, times(3)).getName();

Если в тесте было больше вызовов, это должно быть так:

    @Test
    public void testFive(){
        Person mockedPerson = Mockito.mock(Person.class);
        Mockito.when(mockedPerson.getAge()).thenReturn(1,2,3,4);
        Mockito.when(mockedPerson.getName()).thenReturn("1","2","3");

        InOrder inOrder = Mockito.inOrder(mockedPerson);

        mockedPerson.getAge();
        mockedPerson.getAge();
        mockedPerson.getAge();

        mockedPerson.getName();
        mockedPerson.getName();
        mockedPerson.getName();

        mockedPerson.getAge();


        inOrder.verify(mockedPerson, times(3)).getAge();
        inOrder.verify(mockedPerson, times(3)).getName();
        inOrder.verify(mockedPerson, times(1)).getAge();
    }

Что происходит, когда вызов проверяется с помощьюни один второй аргумент не проверяет только 1 вызов (как если бы вы написали times(1)), и, поскольку вы вызывали 3 раза, он завершился неудачей.

Вот почему мне нравится всегда добавлять times(x), это делает вещи явными.

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