如何使用 MassTransit 测试工具通过构造函数依赖注入通过 Activities (Automatonymous.Binders.EventActivityBinder) 测试 sagas?

How to use MassTransit test harness to test sagas with Activities (Automatonymous.Binders.EventActivityBinder) with constructor dependency injection?

为了使 saga 代码简单,我创建了在触发 saga 事件时执行的活动。现在我想使用 MT 的测试工具为传奇创建测试。我还需要从这些活动中模拟依赖项。如何在 MT 7.0.2 中完成此操作?

此问题与此处找到的问题类似:

下面是一些伪代码来举例说明我的用例:

public class SomeSaga : MassTransitStateMachine<SomeSagaState>
{
    public Event<InitializeCommand> Initialize { get; set; }
    
    public State Initialized { get; set; }

    public SomeSaga()
    {
        InstanceState(x => x.CurrentState);
        Event(() => Initialize, e => { e.CorrelateById(c => c.Message.CorrelationId); });

        Initially(
            When(Initialize)
                .Activity(x => x.OfType<InitializeActivity>())
                .TransitionTo(Initialized));
    }
}

public class InitializeActivity : Activity<SomeSagaState, InitializeCommand>
{
    private readonly ISomeDependency _dep;

    public InitializeActivity(ISomeDependency dep)
    {
        _dep = dep ?? throw new ArgumentNullException(nameof(dep));
    }
    
    public async Task Execute(...)
    {
        // do something
    }
}

您至少需要 MassTransit v7.0.4,不过我建议您使用最新版本。该版本中对 InMemoryTestHarness was added 的容器支持。

Sample-Library.

中也有大量关于如何使用它的示例