Как имитировать метод внедренной службы в тестах интеграции Spring - PullRequest
0 голосов
/ 17 июня 2020

У меня следующий класс обслуживания, который я хочу протестировать

@Service
public class MasterService {

    @Inject
    private ServiceOne serviceOne;

    @Autowired
    private ServiceTwo serviceTwo;

    @Inject
    private ServiceThree serviceThree;

    @VisibleForTesting
    void execute() {
        if (serviceThree.isFlag()) {
           ....
        }
    }

Я тестирую метод execute(). Я хочу высмеять serviceThree.isFlag(), чтобы вернуть истину. Ниже приводится мой тест.

    public class MasterServiceIT{

        @Inject
        private MasterService masterService;

        @Inject
        private ServiceThree serviceThree;

        @Test
        public void testMasterService() {
            when(serviceThree.isFlag()).thenReturn(true); <---- this never works 
            masterService.execute();
        }
    }

Однако он никогда не возвращает истину. Замечания? Я хотел использовать @InjectMocks Тогда могу ли я внедрить только эту службу, над которой я издевался? или мне нужно издеваться над каждой службой, если я использую @InjectMocks

1 Ответ

1 голос
/ 17 июня 2020

Вы уверены, что вам нужно поиздеваться над интеграционным тестом? Ну, иногда бывают случаи, когда нам нужно имитировать какую-то службу, которая относится к некоторым внешним службам, таким как SharePoint и т. Д. c. Хорошо, если вам нужно издеваться, поэтому в этом случае вам нужно издеваться над Spring Service bean в контексте Spring. Вы можете сделать это через @MockBean

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