为什么我的spring-cloud-stream-mockito无法测试自动连接处理器?

时间:2019-01-08 15:10:19

标签: mockito spring-cloud-stream

我正在尝试为我的spring-cloud-stream-stream项目创建测试。我创建了自己的BizSyncProcessor接口,而不是使用默认的处理器,该接口似乎在所有文档中。我之前已经通过测试完成了此类项目,但不记得是否同时使用过模仿程序,所以我想知道这是否是问题所在,因为我正在执行@RunWith(MockitoJUnitRunner.class)而不是@RunWith(SpringRunner)。

在将Rabbit实现作为Maven的依赖项包含在内之前,我还拥有similar problems when building the actual app

IntelliJ在@Autowired BizSyncProcessor上标记一个错误,指出“找不到BizSyncProcessor类型的Bean”。但是我可以运行测试,因此可以编译,但是运行测试时bizSyncProcessor为null。

我加入了模仿,因为侦听消息的处理程序会调用另一个服务(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 :(得分:3)

@SpringBootTest和所有基于Spring的东西在您的情况下都无法正常工作,因为您没有使用@RunWith(SpringRunner)。没什么能把这些弹簧钩扣上的。

另一方面,没有理由使用MockitoJUnitRunner。您只需依靠@MockBean来代替SFISClienthttps://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-mocking-beans