我如何在测试场景中连接 NServiceBus 的 SqlSaga?
How do i wireup NServiceBus' SqlSaga in a test scenario?
https://docs.particular.net/nservicebus/testing/ 有一个非常简洁的示例,说明如何测试一个简单的 Saga。不幸的是,它没有解释如何用 SqlSaga 做同样的事情——即。将状态持久化到数据库的 Saga。
考虑到这个传奇:
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>
}
...
}
如果我尝试像 link 中的示例那样编写测试代码,我会这样做:
// 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属性数据还没有初始化.
如何正确连接 saga 进行测试,以便:
- 数据已初始化
- 并不需要真正的数据库连接
我们有一个更详细地显示单元测试的相关代码示例:https://docs.particular.net/samples/unit-testing/。这包括对 saga (SagaTests.cs
) 的几个测试。
您可以以此为起点,按照以下方式修改 saga 测试:
- 添加
NServiceBus.Persistence.Sql
包。
- 修改
DiscountPolicy
策略传奇以继承自 SqlSaga
而不是 Saga
。
- 解决编译错误(添加缺失方法和属性,可以留空,加上去掉
ConfigureHowToFindSaga
方法)。
希望对您有所帮助,但如果有任何遗漏或无法以这种方式测试您的场景,请告诉我。
https://docs.particular.net/nservicebus/testing/ 有一个非常简洁的示例,说明如何测试一个简单的 Saga。不幸的是,它没有解释如何用 SqlSaga 做同样的事情——即。将状态持久化到数据库的 Saga。
考虑到这个传奇:
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>
}
...
}
如果我尝试像 link 中的示例那样编写测试代码,我会这样做:
// 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属性数据还没有初始化.
如何正确连接 saga 进行测试,以便:
- 数据已初始化
- 并不需要真正的数据库连接
我们有一个更详细地显示单元测试的相关代码示例:https://docs.particular.net/samples/unit-testing/。这包括对 saga (SagaTests.cs
) 的几个测试。
您可以以此为起点,按照以下方式修改 saga 测试:
- 添加
NServiceBus.Persistence.Sql
包。 - 修改
DiscountPolicy
策略传奇以继承自SqlSaga
而不是Saga
。 - 解决编译错误(添加缺失方法和属性,可以留空,加上去掉
ConfigureHowToFindSaga
方法)。
希望对您有所帮助,但如果有任何遗漏或无法以这种方式测试您的场景,请告诉我。