Mockito неправильно вводит строковое значение - PullRequest
0 голосов
/ 21 апреля 2020

Я создал объект в своем тестовом классе testObj, а mockDao - это объект dao, который я смоделировал.

Функция для тестирования - что-то вроде:

MyDao myDao;

String myFunc(String param1, String param2) {
    MyObj realObj = new MyObj("param1", "param2");
    return myDao.someFunction(realObj);
}

Класс UnitTest что-то вроде:

@Mock
MyDao mockDao;
@InjectMock
MyComponent component;

MyObj testObj = new MyObj("param1", "param2");

@Test
public void test() {
    Mockito.when(mockDao.someFunction(testObj)).thenReturn(“123”);
    String returnedValue = component.myFunc("param1","param2");
    Assert.assertEquals(returnedValue, "123");
}

это не должно вводить «123» в моем реальном классе, так как Объект, созданный в реальном классе (realObj), отличается от testObj.

Однако это инъекция "123", и мой тест проходит. Хотя в идеале это должно провалиться.

Как возможно, что эта инъекция происходит?

1 Ответ

0 голосов
/ 21 апреля 2020

Вы не используете никакое сопоставление аргументов в своей настройке mock, в этом случае Mockito должен использовать значение по умолчанию: any (), которое не проверяет, как был вызван метод (в каждом случае он возвращает true).

Попробуйте: Mockito.when(mockDao.someFunction(Mockito.eq(testObj)).thenReturn(“123”). В этом случае Mockito собирается использовать метод equals объекта, в вашем случае это ссылка на объект.

Я предлагаю вам, если вам нужно что-то вроде «Все, что не соответствует следующему», попробуйте посмотреть на Дополнительные мэтчеры Мокито

...