Mockito.when вызов с реальным объектом возвращает нуль, должен использовать any () - PullRequest
0 голосов
/ 13 сентября 2018

Когда я выполняю модульное тестирование с макетом @Service, я замечаю, что в операторе Mockito.when(), когда я сохраняю реальный объект, я получаю null в качестве возврата;и я должен использовать any().

Итак, вместо использования:

@Mock
private BinInfoService service;
...  
@Test
public void testSave() {
    SomeBean bean = new SomeBean();
    Mockito.when(service.saveBinInfo(bean).thenReturn(bean);
}

я должен использовать:

Mockito.when(service.saveBinInfo(Mockito.any(SomeBean.class))).thenReturn(bean);

Первая форма возвращает null.В то время как вторая форма возвращает сохраненную сущность.

Почему?

РЕДАКТИРОВАТЬ:

Извините, на самом деле я не создаю объект как выше.Я использовал два других способа.Смотри мой ответ.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

В конце концов я только что нашел почему.Описание вопроса вводило в заблуждение, поэтому я должен отметить это.

Есть два случая.

  1. В одном методе я сохраняю сущность с помощью ложных вызовов Rest, передавая сущность как сериализованный json в качестве аргумента.Я предполагаю, что при этом каждый раз при создании контекста создается новый объект, а адрес памяти различается.

  2. В другом методе я сохраняю сущность, объявленную как частное поле, и создание экземпляра.метод кода обозначен @Before.Таким образом, перед каждым тестом он будет создан один раз, поэтому адрес памяти снова будет отличным.

0 голосов
/ 13 сентября 2018

С https://static.javadoc.io/org.mockito/mockito-core/2.22.0/org/mockito/Mockito.html#argument_matchers

"Mockito проверяет значения аргументов в естественном стиле Java: с помощью метода equals ()"

Возможно, в вашем бине не реализован метод equals, поэтому он возвращает ноль, потому что новый бин не равен другому в реализации по умолчанию. С другой стороны, средство сопоставления позволяет использовать любой компонент этого класса, поэтому оно всегда возвращает значение.

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