2017-07-07 93 views
0

我尝试了一些与弹簧云流的东西。一切正常,现在我试着写一些测试用例。不幸的是,他们不工作。我的一切归纳为以下的(一切都是在同一种引导程序):使用云流测试不起作用

发件人:

@EnableBinding(Sender.Emitter.class) 
public class Sender { 

    public interface Emitter { 
     String CHANNEL = "emitter"; 
     @Output(CHANNEL) 
     MessageChannel events(); 
    } 
    private Emitter emitter; 

    public Sender(Emitter emitter) { 
     this.emitter = emitter; 
    } 


    public void sendMessage(String massage) { 
     emitter.events().send(MessageBuilder.withPayload(massage).build()); 
    } 
} 

接收器:

@EnableBinding(Receiver.Subscriber.class) 
public class Receiver { 
    public interface Subscriber { 
     String CHANNEL = "subscriber"; 
     @Input(CHANNEL) 
     SubscribableChannel events(); 
    } 
    private String lastMessage; 

    public String getLastMessage() { 
     return lastMessage; 
    } 

    @StreamListener(Subscriber.CHANNEL) 
    public void event(String message) { 
     this.lastMessage = message; 
    } 
} 

我的配置:

spring: 
    cloud: 
    stream: 
     default-binder: rabbit 
     bindings: 
     emitter: 
      destination: testtock 
      content-type: application/json 
     subscriber: 
      destination: testtock 

测试:

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class BasicTest { 

    @Autowired 
    private Receiver receiver; 
    @Autowired 
    private Sender sender; 

    @Test 
    public void test() throws InterruptedException { 
     String massage = UUID.randomUUID().toString(); 
     sender.sendMessage(massage); 
     //Thread.sleep(1000); 
     assertEquals(massage, receiver.getLastMessage()); 
    } 
} 

我想用spring-cloud-stream-test-support进行测试,不需要AMQP消息代理。在测试之外,我使用了rabbitmq,在那里一切正常。 也许spring-cloud-stream-test-support不会真的路由消息?或者这里有什么问题?

回答

0

spring-cloud-stream-test-support提供了测试单个Spring Cloud Stream应用程序并使用TestSupportBinder的功能。因此,这不适用于上面使用的端到端集成测试。

欲了解更多有关使用spring-cloud-stream-test-supportTestSupportBinder,你可以参考文档here

1

也许弹簧云流测试支持并没有真正的路由邮件?

正确;测试活页夹只是一个安全带,它不在绑定之间进行路由;在同一个应用程序中为生产者和消费者绑定相同的目的地是不常见的。

当您在测试中发送消息时,您必须查询活页夹以确保其已发送。您使用MessageCollector来做到这一点。请参阅the documentation,您还可以查看一些out of the box apps的测试。

+0

首先感谢您的回复。但是你知道如何测试BinderAwareChannelResolver的使用吗?我想测试BinderAwareChannelResolver是否被正确的“destination-key”和消息调用。你知道这件事吗? – user3046582

+0

是的。只需使用最近解析的目标的MessageCollector即可。查看[路由器应用测试](https://github.com/spring-cloud-stream-app-starters/router/blob/master/spring-cloud-starter-stream-sink-router/src/test/java/组织/ springframework的/云/流/应用/路由器/汇/ RouterSinkTests.java)。 –