2017-07-07 8 views
0

私はspring-cloud-streamでいくつかのものを試しました。すべてが機能し、今ではいくつかのテストケースを作成しようとしました。残念ながら彼らは働いていません。Cloud Stream Testを使用すると動作しません

送信者:

@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()); 
    } 
} 

AMQPメッセージブローカーを必要としないテストにはspring-cloud-stream-test-supportを使用します。テストの外で私は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が呼び出されたかどうかをテストします。これについて何か知っていますか? – user3046582

+0

はい。新しく解決された宛先のMessageCollectorを使用するだけです。 [router app tests](https://github.com/spring-cloud-stream-app-starters/router/blob/master/spring-cloud-starter-stream-sink-router/src/test/java/)を参照してください。 org/springframework/cloud/stream/app/router/sink/RouterSinkTests.java)。 –

関連する問題