Mockito - ложный вызов метода только для определенного параметра - PullRequest
1 голос
/ 11 марта 2020

Я хочу смоделировать вызов метода для определенного параметра c и вызвать реальный метод для остальных. У меня есть:

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@SpringBootTest(classes = AppConfig.class)
@ActiveProfiles("mvntest")
public class OKMMoveMergeTest {
    @MockBean
    private FolderDAO folderDAO;
    ...

    @Test
    public void callDocCreateEp() throws Exception {
        Mockito.doCallRealMethod().when(folderDAO).getFoldersHierarchy(any(EHierarchyType.class));
        Mockito.doReturn(screwedHierarchy).when(folderDAO).getFoldersHierarchy(EHierarchyType.CLIENT_DOC);

        ...
    }
}

С этим я получаю поддельный результат для folderDAO.getFoldersHierarchy(EHierarchyType.CLIENT_DOC), но когда я пытаюсь вызвать его с любым другим параметром, я получаю NullPointerException

, так что я делаю неправильно или как мне заглушить вызов метода только для определенного параметра?

junit-jupiter-api: 5.4.0

junit-jupiter-engine: 5.4.0

spring-boot: 2.1.4. ВЫПУСК mockito-junit-jupiter: 2.23.0

1 Ответ

1 голос
/ 11 марта 2020

Вам нужно создать шпиона для своего боба вместо Mock. Вы можете использовать аннотацию @SpyBean. Это создаст Spy и поместит его в контекст так же, как это делает @MockBean. В случае со Spy у вас будет реальный объект за ним, но вы все равно сможете переопределить поведение, если это необходимо, как если бы у вас был макет. Для примеров смотрите следующую статью

...