почему мой тест на мокито в весеннем облачном потоке не может автоматически подключить мой процессор? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь создать тесты для моего проекта spring-cloud-stream. Я создал свой собственный интерфейс BizSyncProcessor вместо использования процессора по умолчанию, который, кажется, есть во всей документации. Я делал этот проект раньше с тестами, но не могу вспомнить, использовал ли я в то же время mockito, поэтому мне интересно, в этом ли проблема, потому что я делаю @RunWith (MockitoJUnitRunner.class) вместо @RunWith (SpringRunner).

У меня также были похожие проблемы при создании реального приложения , прежде чем я включил реализацию кролика в качестве зависимости в maven.

IntelliJ отмечает ошибку в @Autowired BizSyncProcessor, говоря, что «Бины типа« BizSyncProcessor »не найдены». Однако я могу запустить тест, поэтому он компилируется, но тогда bizSyncProcessor будет нулевым при запуске теста.

Я включаю mockito, потому что обработчик, который прослушивает сообщение, делает вызов другой службе (SFISClient), поэтому я игнорирую этот вызов.

Вот мой тест:

@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@EnableAutoConfiguration
@Configuration
@EnableBinding(BizSyncProcessor.class)
public class UpdatedBusinessHandlerTest {

    @Autowired
    private BizSyncProcessor bizSyncProcessor;

    @Autowired
    private MessageCollector messageCollector;

    @Mock
    SFISClient sfisClient;

    @InjectMocks
    UpdatedBusinessHandler updatedBusinessHandler;

    @Test
    public void testWiring() throws Exception {
        UpdatedBusinessAlert updatedBusinessAlert = new UpdatedBusinessAlert();
        updatedBusinessAlert.setBusinessId(UUID.randomUUID());
        Message<UpdatedBusinessAlert> updatedBusinessAlertMessage = MessageBuilder.withPayload(updatedBusinessAlert).build();
        bizSyncProcessor.writeUpdatedBusinessIds().send(updatedBusinessAlertMessage);

        Message<BusinessFlooringSummary> businessFlooringSummaryMessage = (Message<BusinessFlooringSummary>) messageCollector.forChannel(bizSyncProcessor.writeFlooringSummaries()).poll();
        BusinessFlooringSummary businessFlooringSummary = businessFlooringSummaryMessage.getPayload();
        assertNotNull(businessFlooringSummary);
    }
}

1 Ответ

0 голосов
/ 08 января 2019

@SpringBootTest и все, что основано на Spring, не будут работать в вашем случае, потому что вы не используете @RunWith(SpringRunner). Нет ничего, что могло бы вызвать эти пружинные крючки.

С другой стороны, нет причины использовать MockitoJUnitRunner. Вы просто можете положиться на @MockBean вместо своего SFISClient: https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-mocking-beans

...