На https://docs.particular.net/nservicebus/testing/ есть очень хороший пример о том, как протестировать простую сагу. К сожалению, это не объясняет, как сделать то же самое с SqlSaga, т.е. Сага с сохранением состояния в базе данных.
Учитывая эту сагу:
public class SomeFancySaga : SqlSaga<MySagaData>,
IAmStartedByMessages<ImportantCommand>
{
protected override string CorrelationPropertyName => nameof(Data.MyPrimaryKey);
protected override void ConfigureMapping(IMessagePropertyMapper mapper)
{
mapper.ConfigureMapping<ImportantCommand>(x => x.CommandId);
}
public async Task Handle(ImportantCommand command, IMessageHandlerContext context)
{
if (Data.State == MyState.ReadyForUse)
<do some stuff>
}
...
}
Если я попытаюсь написать тестовый код, как в примере по ссылке, я бы сделал что-то вроде этого:
// arrange
var context = new NServiceBus.Testing.TestableMessageHandlerContext();
var command = ImportantCommand.Create();
var sut = new CreateSomeFancySaga();
// act
sut.Handle(command, context);
// assert
...
Вызов sut.Handle() вызовет исключение NullReferenceException, поскольку данные свойства Saga не были инициализированы.
Как мне правильно подключить сагу для тестирования, чтобы:
- Данные инициализированы
- Реальное подключение к базе данных на самом деле не требуется