我正在尝试为我的spring云流项目创建测试。我创建了自己的BizSyncProcessor接口,而不是使用默认的Processor,这似乎在所有文档中都有。我以前做过这样的测试项目,但不记得我是否同时使用了mockito,所以我想知道这是否是问题所在,因为我使用的是@RunWith(MockitoJUnitRunner.class)而不是@RunWith(SpringRunner)。
在将rabbit实现作为依赖项包含在maven中之前,我在构建实际应用程序时也遇到了类似的问题。
IntelliJ在@Autowired BizSyncProcessor上标记一个错误,称"找不到"BizSyncProcesser"类型的Bean。"。然而,我可以运行测试,所以它会编译,但在运行测试时bizSyncProcessor为null。
我之所以包含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);
}
}
@SpringBootTest
和所有基于Spring的东西在您的情况下都不起作用,因为您不使用@RunWith(SpringRunner)
。没有什么能触发那些弹簧挂钩。
另一方面,没有理由使用MockitoJUnitRunner
。您只需使用@MockBean
即可获得SFISClient
:https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-测试模拟beans 的春季启动应用程序的功能