为什么可以';我的spring cloud stream mockito测试自动连接我的处理器吗?

为什么可以';我的spring cloud stream mockito测试自动连接我的处理器吗?,mockito,spring-cloud-stream,Mockito,Spring Cloud Stream,我正在尝试为我的SpringCloudStream项目创建测试。我创建了自己的BizSyncProcessor接口,而不是使用默认处理器,这似乎在所有文档中都有。我以前用测试做过此类项目,但不记得是否同时使用了mockito,所以我想知道这是否是问题所在,因为我正在使用@RunWith(MockitoJUnitRunner.class)而不是@RunWith(SpringRunner) 在我将rabbit实现作为依赖项包含在maven中之前,我也有 IntelliJ在@Autowired Biz

我正在尝试为我的SpringCloudStream项目创建测试。我创建了自己的BizSyncProcessor接口,而不是使用默认处理器,这似乎在所有文档中都有。我以前用测试做过此类项目,但不记得是否同时使用了mockito,所以我想知道这是否是问题所在,因为我正在使用@RunWith(MockitoJUnitRunner.class)而不是@RunWith(SpringRunner)

在我将rabbit实现作为依赖项包含在maven中之前,我也有

IntelliJ在@Autowired BizzyncProcessor上标记错误,表示“找不到BizzyncProcessor类型的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);
    }
}
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(webEnvironment=SpringBootTest.webEnvironment.RANDOM\u端口)
@启用自动配置
@配置
@EnableBinding(BizSyncProcessor.class)
公共类UpdatedBusinessHandlerTest{
@自动连线
专用BizSyncProcessor BizSyncProcessor;
@自动连线
私有消息收集器消息收集器;
@嘲弄
SFISClient SFISClient;
@注射模拟
UpdatedBusinessHandler UpdatedBusinessHandler;
@试验
public void testwilling()引发异常{
UpdatedBusinesAlert UpdatedBusinesAlert=新建UpdatedBusinesAlert();
updatedBusinessAlert.setBusinessId(UUID.randomUUID());
Message updatedBusinessAlertMessage=MessageBuilder.withPayload(updatedBusinessAlert.build();
bizSyncProcessor.WriteUpdatedBusinessId().send(updatedBusinessAlertMessage);
Message businessFlooringSummaryMessage=(Message)messageCollector.forChannel(bizSyncProcessor.writeFlooringSummaries()).poll();
BusinessFloorringSummary BusinessFloorringSummary=BusinessFloorringSummaryMessage.getPayload();
assertNotNull(BusinessFloorringSummary);
}
}

在您的案例中,
@SpringBootTest
和所有基于Spring的东西都不起作用,因为您没有使用
@RunWith(SpringRunner)
。没有什么东西能弄到那些弹簧钩


另一方面,没有理由使用
MockitoJUnitRunner
。您可以简单地依赖
@MockBean
来代替
SFISClient

SpringBootTest
和所有基于Spring的东西在您的案例中都不起作用,因为您不使用
@RunWith(SpringRunner)
。没有什么东西能弄到那些弹簧钩


另一方面,没有理由使用
MockitoJUnitRunner
。您只需依赖
@MockBean
即可获得您的
SFISClient

谢谢;我错误地认为MockitoJUnitRunner扩展了SpringRunner,或者以某种方式引入了基本Spring上下文;我错了,谢谢;我错误地认为MockitoJUnitRunner扩展了SpringRunner,或者以某种方式引入了基本Spring上下文;我错了