2017-02-16 28 views
0

我不知道如何使用kafka進行一個樣本測試,我試圖按照春季指南但不工作。使用kafka創建使用Spring雲流的單元測試錯誤

有人可以幫助我嗎?

ZZZZZ ZZ zzzzzzzzzzz

@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; 

回答

0

看起來你有一個在類路徑上設置不匹配的依賴關係(即Spring Cloud Stream核心的舊版本)。

您可以通過刪除版本spring-cloud-stream-test-support來解決此問題,因爲Camden.SR4 BOM將提供正確的版本。

而且,如果你想與嵌入式卡夫卡實例進行測試,你可以在這裏找到一個例子:https://github.com/spring-cloud/spring-cloud-stream-samples/blob/master/multibinder/src/test/java/multibinder/RabbitAndKafkaBinderApplicationTests.java#L57

(示例顯示瞭如何使用用於測試的嵌入式代理配置卡夫卡粘結劑 - 這也說明如何在同一個應用程序中使用兩個不同的聯編程序,但可能你並不關心)。

+0

'code' dependencyManagement { 進口{ mavenBom 「org.springframework.cloud:spring-cloud-dependencies:Camden.SR4」 } } compile'org.springframework.cloud:spring-cloud-starter-stream-kafka' 編譯組:'org.springframework.cloud',名稱:'spring-cloud-stream-test-support',版本:'1.1.1.RELEASE' –

0

馬呂斯Bogoevici,我dependencys

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' 
0

這是因爲不兼容的版本,如通過上面馬裏烏斯指出。

您需要Camden.SR5,它具有Spring Cloud Stream和Spring Cloud Stream測試支持的兼容版本,或者需要Camden.SR4以及Spring Cloud Stream測試支持版本1.1.0.RELEASE

This是變化的是1.1.0.RELEASE和Spring雲Steram的1.1.1.RELEASE之間走了進去:

+0

修改Ilayaperumal Gopinathan謝謝你,我能夠添加第二個參數,但錯誤仍然存​​在同樣的。 –

+0

你能分享你當前的依賴和異常堆棧跟蹤嗎? –

相關問題