Я пытаюсь написать модульный тест для своей саги. Я использовал SagaFixture для размещения своей Saga и использования FakeBus. Я также использовал FakeMessageContext, потому что в исполнении Saga я использую MessageContext для получения обратного адреса.
Теперь, когда я пытаюсь вызвать метод Handle для Fixture, он выдает исключение типа NullReferenceException.
Вставка кода ниже:
ПоискSaga
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);
}
}
СагаЮнитТест
[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) в Rebus.Bus.Dispatcher.DispatchToHandler[TMessage](сообщение TMessage, IHandleMessages1 handler) at Rebus.Testing.SagaFixture
1.Handle[TMessage](сообщение TMessage)