我正在尝试为我的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);
}
}
答案 0 :(得分:3)
@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