2016-05-16 4 views
3

MassTransitを使用している加入者をテストする必要があります。以下はMassTransit Subscriberのテスト

はサンプルコードです:

using System; 
using MassTransit; 

public class AnimalSubscriber : Consumes<Animal>.Context 
{ 
    public void Consume(IConsumeContext<Animal> message) 
    { 
     //.. my code here.. 
    } 
} 

今、私はどのように加入者をテストするためにアイデアを持っていません。誰かが私にいくつかの詳細を知らせることができれば;それは非常に役立つだろう!

愚かなことに、私はAnimalSubscriberのObjectを作成し、Consumeメソッドを呼び出すことを考えました。

[TestFixture] 
public class Test 
{ 
    [Test] 
    public void SearchAnimals() 
    { 
     AnimalSubscriber subscriber = new AnimalSubscriber(); 
     Animal request = new Animal 
     { 
      Id : 1, 
      Name : "Tiger" 
     }; 

     //Not sure how to mock this IReceiveContext. 
     IReceiveContext context = new ReceiveContext(); 

     IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request); 

     subscriber.Consume(null); 
    } 
} 

しかし、私は、コードの以下の行で捕まってしまった:

IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request); //<- Not sure how to mock this IReceiveContext. 

エラー:型 'MassTransit.Context.ReceiveContextは' は コンストラクタが定義されていない

必要性いくつかのアドバイスをしてください!

答えて

0

MassTransit v2を使用している場合(上で指定したインターフェイスに基づいています)、Testing名前空間を使用してテストを構築できます。一例として、https://github.com/MassTransit/MassTransit/blob/v2-master/src/MassTransit.Tests/Testing/ConsumerTest_Specs.cs#L19

、テスト・フィクスチャは、あなたの消費者を構築し、それにメッセージを送信するように設定することができます。例:ユニットテストがV2リポジトリのブランチで利用可能である

_test = TestFactory.ForConsumer<AnimalSubscriber>() 
    .InSingleBusScenario() 
    .New(x => 
     { 
      x.ConstructUsing(() => new AnimalSubscriber()); 

      x.Send(new Animal(), (scenario, context) => context.SendResponseTo(scenario.Bus)); 
     }); 

_test.Execute(); 

その後、やる、

_test.Sent.Any<A>().ShouldBeTrue(); 

V3に存在しながら、これが唯一のV2で動作することに注意してください、テストの名前空間、次のような、そのテストの周りにアサーションを構築することができますまだ正確には動作していません(それはasyncに移動しても生き残れませんでした。

関連する問題