为什么我的 spring-cloud-stream mockito 不能测试自动装配我的处理器?
why can't my spring-cloud-stream mockito test Autowire my Processor?
我正在尝试为我的 spring-cloud-stream 项目创建测试。我已经创建了自己的 BizSyncProcessor 接口,而不是使用默认的处理器,这似乎在所有文档中都有。我以前用测试做过这种项目,但不记得我是否同时使用过 mockito,所以我想知道这是否是问题所在,因为我正在做 @RunWith(MockitoJUnitRunner.class)而不是@RunWith(SpringRunner)。
在我将 rabbit 实现作为依赖项包含在 maven 之前,我也有 。
IntelliJ 在@Autowired BizSyncProcessor 上标记了一个错误,说“找不到 'BizSyncProcessor' 类型的 Beans。但是我能够 运行 测试,所以它编译,但是当 运行 测试时 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);
}
}
@SpringBootTest
和所有基于 Spring 的东西在您的情况下都不起作用,因为您不使用 @RunWith(SpringRunner)
。没有什么可以触发那些 Spring 钩子。
另一方面,没有理由使用 MockitoJUnitRunner
。你可以简单地依靠 @MockBean
而不是你的 SFISClient
: https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-mocking-beans
我正在尝试为我的 spring-cloud-stream 项目创建测试。我已经创建了自己的 BizSyncProcessor 接口,而不是使用默认的处理器,这似乎在所有文档中都有。我以前用测试做过这种项目,但不记得我是否同时使用过 mockito,所以我想知道这是否是问题所在,因为我正在做 @RunWith(MockitoJUnitRunner.class)而不是@RunWith(SpringRunner)。
在我将 rabbit 实现作为依赖项包含在 maven 之前,我也有
IntelliJ 在@Autowired BizSyncProcessor 上标记了一个错误,说“找不到 'BizSyncProcessor' 类型的 Beans。但是我能够 运行 测试,所以它编译,但是当 运行 测试时 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);
}
}
@SpringBootTest
和所有基于 Spring 的东西在您的情况下都不起作用,因为您不使用 @RunWith(SpringRunner)
。没有什么可以触发那些 Spring 钩子。
另一方面,没有理由使用 MockitoJUnitRunner
。你可以简单地依靠 @MockBean
而不是你的 SFISClient
: https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-mocking-beans