1

私はサガの単体テストを書こうとしています。SagaFixture を使用して Saga をホストし、FakeBus を使用しました。Saga 実行では、MessageContext を使用して戻りアドレスを取得しているため、FakeMessageContext も使用しました。

ここで、Fixture で Handle メソッドを呼び出そうとすると、NullReferenceException 型の例外がスローされます。

以下のコードを貼り付けます:

検索佐賀

public class SearchSaga : Saga<SearchSagaData>, IAmInitiatedBy<PersonRequested>, IHandleMessages<PersonSearchCompleted>
{
    public void Handle(PersonRequested message)
       {
            Data.Id = new Guid(message.MessageId);
            Data.ReturnAddress = MessageContext.GetCurrent().ReturnAddress;
            Bus.Publish(message);
        }

}

SagaUnitTest

[Test]
        public void PublishResponseOfTypeSearchPersonRequest()
        {
            var bus = new FakeBus();
            var saga = new SearchSaga(bus);
            var fixture = new SagaFixture<SearchSagaData>(saga);
            FakeMessageContext.Reset();
            var fakeContext = MockRepository.GenerateMock<IMessageContext>();
            fakeContext.Stub(s => s.ReturnAddress).Return("queuename");
            fakeContext.Stub(s => s.Headers).Return(new Dictionary<string, object>());

            // act
            using (FakeMessageContext.Establish(fakeContext))
            {
                fixture.Handle(new PersonRequested {MessageId = Guid.NewGuid().ToString(), Query = "Abc"});
            }
            var sentRequests = bus.PublishedMessages.OfType<SearchPersonRequest>().ToList();
            Assert.That(sentRequests.Count, Is.EqualTo(1));
        }

エラー スタックトレース: Rebus.SagaContext..ctor(Guid id) at Rebus.Bus.Dispatcher.DispatchToHandler[TMessage](TMessage メッセージ、IHandleMessages 1 handler) at Rebus.Testing.SagaFixture1.Handle[TMessage](TMessage メッセージ)

4

1 に答える 1