Мокито не возвращает то, что мне нужно - PullRequest
0 голосов
/ 24 августа 2018
public class ConnectionPointTest {

    @Test
    public void testMockito() throws IOException {

        DataInputStream dataInputStream = mock(DataInputStream.class);
        when(dataInputStream.readUTF()).thenReturn("Test");
        new JustTest(dataInputStream).doTest();

    }

    public class JustTest {
        DataInputStream dataInputStream;

        public JustTest(DataInputStream dataInputStream) {
            this.dataInputStream = dataInputStream;
        }

        public void doTest() throws IOException {
            String s = dataInputStream.readUTF();
            System.out.println(s);
        }
    }
}

Я реализую тестирование JUnit + Mockito в проекте.Затем я пытаюсь издеваться над своим DataInpuStream, у меня есть исключение по этому коду:

 when(dataInputStream.readUTF()).thenReturn("Test");

PS класс JustTest только для того, чтобы показать вам, что я хочу издеваться.

Есть исключение:

java.lang.NullPointerException
    at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:337)
    at java.io.DataInputStream.readUTF(DataInputStream.java:589)
    at java.io.DataInputStream.readUTF(DataInputStream.java:564)
    ...

1 Ответ

0 голосов
/ 24 августа 2018

Вы пытаетесь смоделировать последний метод:

public final String readUTF() throws IOException {
    return readUTF(this);
}

Mockito (v2.x) поддерживает это, но требует дополнительной настройки.Подробнее в документах :

Насмешка над итоговыми классами и методами - это инкубационная функция.Он использует комбинацию инструментария агента Java и подклассов для обеспечения возможности переноса этих типов.Поскольку это работает иначе, чем наш текущий механизм, и у этого есть другие ограничения, и поскольку мы хотим собрать опыт и отзывы пользователей, эта функция должна была быть явно активирована, чтобы быть доступной;это можно сделать с помощью механизма расширения mockito, создав файл src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker, содержащий одну строку:

mock-maker-inline

Итак, создайте файл с именем org.mockito.plugins.MockMaker с этимcontent:

mock-maker-inline

Поместите этот файл в папку с именем mockito-extensions на вашем пути к классам теста (если вы используете Maven, просто создайте эту папку в src/test/resources)

Повторно запустите свой тест.

С этой конфигурацией я успешно выполнил ваш тест с:

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