【问题标题】:Error creating unit test with Spring cloud stream using kafka使用 kafka 使用 Spring 云流创建单元测试时出错
【发布时间】:2017-03-10 02:28:16
【问题描述】:

我不知道如何使用 kafka 进行样本测试,我尝试遵循 spring 指南但不起作用。

有人可以帮助我吗?

zzzzz zz z z z z z z z z z z

@RunWith(SpringRunner.class)
@SpringBootTest
@DirtiesContext 
public class EnrollSenderTest {

@Autowired
public EnrollSender producer;

@Autowired
private BinderFactory<MessageChannel> binderFactory;

@Autowired
private MessageCollector messageCollector;

@SuppressWarnings("unchecked")
@Test
public void test() {

    Message<String> message = new GenericMessage<>("hello");
    producer.sendEnroll(message);

    Message<String> received = (Message<String>) messageCollector.forChannel(producer.getOutput()).poll();
    assertThat(received.getPayload(), equalTo("hello"));
}
}

我的班级制作人是:

@Service
@EnableBinding(Source.class)
public class EnrollSender {

private final MessageChannel output;

public EnrollSender(Source output) {
    this.output = output.output();
}

public void sendEnroll(Object enroll) {
    output.send(MessageBuilder.withPayload(enroll).build());
}

public MessageChannel getOutput() {
    return output;
}

}

但给出以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messageCollector' defined in class path resource [org/springframework/cloud/stream/test/binder/TestSupportBinderAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.stream.test.binder.MessageCollector]: Factory method 'messageCollector' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.cloud.stream.binder.BinderFactory.getBinder(Ljava/lang/String;Ljava/lang/Class;)Lorg/springframework/cloud/stream/binder/Binder;

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.stream.test.binder.MessageCollector]: Factory method 'messageCollector' threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.cloud.stream.binder.BinderFactory.getBinder(Ljava/lang/String;Ljava/lang/Class;)Lorg/springframework/cloud/stream/binder/Binder;

Caused by: java.lang.NoSuchMethodError: org.springframework.cloud.stream.binder.BinderFactory.getBinder(Ljava/lang/String;Ljava/lang/Class;)Lorg/springframework/cloud/stream/binder/Binder;

【问题讨论】:

    标签: apache-kafka spring-cloud-stream


    【解决方案1】:

    Marius Bogoevici,我的眷属

    dependencyManagement {
     imports {
          mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR4"
       }
    }
    
    compile 'org.springframework.cloud:spring-cloud-starter-stream-kafka'
    compile group: 'org.springframework.cloud', name: 'spring-cloud-stream-test-support', version: '1.1.1.RELEASE'
    

    【讨论】:

      【解决方案2】:

      看起来您在类路径上设置了不匹配的依赖项(即旧版本的 Spring Cloud Stream 核心)。

      您可以通过删除spring-cloud-stream-test-support 的版本来解决此问题,因为Camden.SR4 BOM 将提供正确的版本。

      此外,如果您想使用嵌入式 Kafka 实例进行测试,可以在此处找到示例:https://github.com/spring-cloud/spring-cloud-stream-samples/blob/master/multibinder/src/test/java/multibinder/RabbitAndKafkaBinderApplicationTests.java#L57

      (该示例向您展示了如何使用嵌入式代理配置 Kafka binder 以进行测试 - 它还展示了如何在同一个应用程序中使用两个不同的 binder,但您可能并不关心这一点。

      【讨论】:

      • codedependencyManagement { 进口 { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR4" } } 编译 'org.springframework.cloud:spring-cloud-starter-stream -kafka' 编译组:'org.springframework.cloud',名称:'spring-cloud-stream-test-support',版本:'1.1.1.RELEASE'
      【解决方案3】:

      这是因为上面 Marius 指出的版本不兼容。

      您需要Camden.SR5 具有兼容版本的 Spring Cloud Stream 和 Spring Cloud Stream 测试支持,或者需要 Camden.SR4 具有 Spring Cloud Stream 测试支持版本1.1.0.RELEASE

      This 是 Spring Cloud Steram 的 1.1.0.RELEASE1.1.1.RELEASE 之间的变化:

      【讨论】:

      • 修改了Ilayaperumal Gopinathan 谢谢,我可以添加第二个参数,但错误仍然存​​在。
      • 你能分享你当前的依赖和异常堆栈跟踪吗?
      猜你喜欢
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2018-10-15
      • 2020-07-07
      • 1970-01-01
      • 2011-05-19
      相关资源
      最近更新 更多