Я не могу @Spy объект в весеннем загрузочном тесте Cucumber в двух шагах - PullRequest
0 голосов
/ 03 февраля 2019

У меня проблема с запуском теста на огурец с Spring Boot 2.

У меня есть два определения шагов, и в обоих предложениях я пытаюсь шпионить за объектом с помощью mockito, пытаясь захватить аргумент, переданный одному из методов:этот класс.

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

@ActiveProfiles("INTEGRATION_TEST")
@SpringBootTest
@ContextConfiguration(classes = ServiceApplication.class)
@TestPropertySource(properties = 
      {"spring.config.location=classpath:application-test.yml"})
public abstract class BaseTestIntegration {}


@Ignore
public class OfferEventsGenerationStep extends BaseTestIntegration {

@Autowired private LoanOfferBatchController loanOfferBatchController;
@SpyBean private SendEventOfferServiceImpl sendEventService;
@Captor private ArgumentCaptor<CreateOfferToUserEvent> createOfferEventCaptor;
@Autowired private GenericWebApplicationContext context;
.........
 @Then("^events will be created$")
public void eventsWillBeCreated() throws Throwable {
    Mockito.verify(sendEventService, Mockito.times(5)).sendEvent(createOfferEventCaptor.capture());
 }
}


@Ignore
public class SecondEventsGenerationStep  {

@Autowired private LoanOfferBatchController loanOfferBatchController;
@SpyBean private SendEventSencondServiceImpl sendEventService;
@Captor private ArgumentCaptor<CreateOfferToUserEvent> createOfferEventCaptor;
@Autowired private GenericWebApplicationContext context;
.........
 @Then("^events will be created$")
public void eventsWillBeCreated() throws Throwable {
    Mockito.verify(sendEventService, Mockito.times(2)).sendEvent(createOfferEventCaptor.capture());
 }
}

И все работает отлично, за исключением того, что sendEventService распознается только как шпионский бин в классе, который расширяет класс BaseTestIntegration, другой выдает это исключение:

 org.mockito.exceptions.misusing.NotAMockException: 
 Argument passed to verify() is of type SendEventSencondServiceImpl and is not a mock!

1 Ответ

0 голосов
/ 03 февраля 2019

В настоящее время невозможно использовать @MockBean или @SpyBean, потому что cucumber-spring превращает определения шагов в bean-компоненты и не использует TestContextManager.Существует проблема с поддержкой @MockBean в cucumber-spring # 1470 .Хватит, если кто-нибудь захочет его взять.

...