今日、難しい方法でしたが、サガのテストではConfigureHowToFindSaga
. 私のテストではマッピングがカバーされていないため、「Saga not found」例外が本番環境に表示されます。問題を説明する非常に単純なサンプル サガを作成しました。
public class MySpecialSaga : Saga<MySagaData>,
IAmStartedByMessages<StartMessage>,
IHandleMessages<NextMessage>
{
public void Handle(StartMessage message)
{
Data.SagaId = message.Id;
Console.WriteLine("Saga started with id: " + message.Id);
}
public void Handle(NextMessage message)
{
Console.WriteLine("Handling next message with id: " + message.Id);
Bus.Send(new StartMessage() {Id = message.Id + 1});
}
}
public class NextMessage : ICommand
{
public int Id { get; set; }
}
public class StartMessage : ICommand
{
public int Id { get; set; }
}
public class MySagaData : IContainSagaData
{
public Guid Id { get; set; }
public string Originator { get; set; }
public string OriginalMessageId { get; set; }
public int SagaId { get; set; }
}
現在、次の2つのテストがあります。
[TestFixture]
public class MySpecialSagaTests
{
public MySpecialSagaTests()
{
Test.Initialize();
}
[Test]
public void WhenSagaDoesNotExistItShouldNotFindSaga()
{
Test.Saga<MySpecialSaga>()
.ExpectNotSend<StartMessage>(m => m.Id == 2)
.When(s => s.Handle(new NextMessage() {Id = 1}));
}
[Test]
public void WhenSagaDoesExistItShouldFindSaga()
{
Test.Saga<MySpecialSaga>()
.When(s => s.Handle(new StartMessage(){ Id = 1}))
.ExpectNotSend<StartMessage>(m => m.Id == 2)
.When(s => s.Handle(new NextMessage() {Id = 1}));
}
}
最初のものは、サガを見つけることができないため、失敗するか、少なくともメッセージを送信しないはずです。ConfigureHowToFindSaga
メソッドを追加すると、2 番目のテストに合格するはずです。サガをテストするとき、何らかの理由でこれは考慮されません。これにより、マッピングが欠落しているために実行されない saga 内のハンドラーが発生する可能性があります。
このシナリオはどのようにテストする必要がありますか?