Junit - Mockito - как правильно настроить макет объектов - PullRequest
0 голосов
/ 22 мая 2018

Я создаю тесты для разных методов, но все эти методы очень похожи - что-то добавляется в Day.

Я создал объект Day для тестирования и высмеял некоторые вещи, такие как База данных.Но у меня есть проблемы с настройкой этого должным образом.

Например: один метод, который возвращает Day для использования этого дня в моем методе addSomething(), выглядит следующим образом:

Item item = dbService.get(tableName, Collections.singletonList(primaryKey));
String measurementsJSON = item.getJSON("measurements");

Я смоделировал базу данных и Item, и я хотел настроить 'до того, как я это сделал:

@Before
public void setUp() throws Exception {
    activitiesService = new ActivitiesService(databaseControllerMock);
    when(eq(item).getJSON(anyString())).thenReturn(anyString());
}

Но в этом случае я получаю сообщение об ошибке:

java.lang.NullPointerException
at service.activity.service.ActivitiesServiceTest.setUp(ActivitiesServiceTest.java:45) //this line with "when..."

И другие ошибки:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: здесь обнаружен неуместный сопоставитель аргументов: -> at service.activity.service.ActivitiesServiceTest.setUp (ActivitiesServiceTest.java:45)

Нельзя использовать сопоставители аргументов вне проверки или заглушки,Примеры правильного использования сопоставителей аргументов: when (mock.get (anyInt ())). ThenReturn (null);doThrow (new RuntimeException ()). when (mock) .someVoidMethod (anyObject ());verify (mock) .someMethod (содержит ("foo"))

Кроме того, эта ошибка может отображаться, поскольку вы используете сопоставления аргументов с методами, которые не могут быть смоделированы.Следующие методы не могут быть заданы / проверены: final / private / equals () / hashCode ().

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы не должны использовать предложение when внутри метода setUp.

@Before
public void setUp() throws Exception {
     activitiesService = new ActivitiesService(databaseControllerMock);
}

@Test
public void testSomething() {
      when(eq(item).getJSON(anyString())).thenReturn(anyString());
}

Кроме того, если вы можете добавить свой класс для тестирования, мы можем помочь легче.

0 голосов
/ 22 мая 2018

Как говорится в сообщении

You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);

Измените

when(eq(item).getJSON(anyString())).thenReturn(anyString());

на какой-либо возврат строки, что-то вроде

when(eq(item).getJSON(anyString())).thenReturn("{somekey:somevalue}");

Я предполагаю, что вы хотите вернутьпредставление json в виде строки

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