Есть ли в Mockito способ вернуть объект, если он был получен? - PullRequest
0 голосов
/ 13 февраля 2020

Есть ли способ вернуть полученный объект в Mockito? Я хочу сделать это, имитируя сохранение объекта в базе данных. Как то так:

someClass someObj = ...;

when(dataProviderMock.insert(someObj))
    .then(
          when(dataProviderMock.read(someObj.getId()))
         .thenReturn(someObj)
    );

Ответы [ 3 ]

1 голос
/ 13 февраля 2020

Я не уверен в его преимуществах, но это сработает:

// Сохранение сохраненных объектов на карте

 Map<Integer, Object> savedObjects = new HashMap<>(); 



// Saves the object in the map
when(dataProviderMock.insert(any(SomeClass.class))).thenAnswer(new Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                SomeClass someObj = ((SomeClass)invocation.getArgument(0));
                savedObjects.put(someObj.getId(), someObj);
                return null;
            }
        });

// retrieves the object from the map or null if it was not previously saved
when(dataProviderMock.read(any(Integer.class))).thenAnswer(new Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                Integer id = ((Integer)invocation.getArgument(0));
                return savedObjects.get(id);
            }
        });
1 голос
/ 13 февраля 2020

То, что вы ищете, это ArgumentCaptor от Mockito. Проверьте этот другой вопрос

Пример аргумента Mockito для аргумента Captor

0 голосов
/ 13 февраля 2020

Если я правильно понял, вы хотите вернуть объект при вызове вставки. При условии, что ваша функция вставки имеет возвращаемый тип someObj. вы можете напрямую вернуть объект, используя

    when(dataProviderMock.insert(someObj)).thenReturn(someObj)

Если ваш тип возврата void для dataProviderMock.insert() функции, вы можете сделать это:

    doNothing().doReturn(someObj).when(dataProviderMock).insert(someObj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...