gpt4 book ai didi

testing - 我如何在测试场景中连接 NServiceBus 的 SqlSaga?

转载 作者:行者123 更新时间:2023-11-28 21:07:55 25 4
gpt4 key购买 nike

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>
}
...
}

如果我尝试像链接中的示例一样编写测试代码,我会这样做:

// 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 属性 Data 尚未初始化

我如何正确连接 saga 以进行测试,以便:

  1. 数据初始化
  2. 并不是真的需要一个真正的数据库连接

最佳答案

我们有一个更详细地显示单元测试的相关代码示例:https://docs.particular.net/samples/unit-testing/ .其中包括几个针对 saga 的测试 (SagaTests.cs)。

您可以以此为起点,按照以下方式修改 saga 测试:

  1. 添加 NServiceBus.Persistence.Sql 包。
  2. 修改 DiscountPolicy 策略 saga 以继承自 SqlSaga 而不是 Saga
  3. 解决编译错误(添加缺少的方法和属性,可以将它们留空,并删除 ConfigureHowToFindSaga 方法)。

希望对您有所帮助,但如果有任何遗漏或您的场景无法以这种方式进行测试,请告诉我。

关于testing - 我如何在测试场景中连接 NServiceBus 的 SqlSaga?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50874390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com