如何使用MassTransit测试工具通过带有构造函数依赖项注入的Activity(Automatonymous.Binders.EventActivityBinder)测试sagas? [英] How to use MassTransit test harness to test sagas with Activities (Automatonymous.Binders.EventActivityBinder) with constructor dependency injection?

查看:74
本文介绍了如何使用MassTransit测试工具通过带有构造函数依赖项注入的Activity(Automatonymous.Binders.EventActivityBinder)测试sagas?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为了使传奇代码保持简单,我创建了在触发传奇事件时执行的活动.现在,我想使用MT的测试工具为传奇创建测试.我还需要模拟这些活动的依赖关系.在MT 7.0.2中如何做到这一点?

这个问题类似于在这里找到的一个问题:如何使用MassTransit测试工具进行测试使用构造函数依赖注入的消费者吗?

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

 公共类SomeSaga:MassTransitStateMachine< SomeSagaState>{公共事件< InitializeCommand>初始化{get;放;}公共状态已初始化{get;放;}公共SomeSaga(){InstanceState(x => x.CurrentState);Event(()=>初始化,e => {e.CorrelateById(c => c.Message.CorrelationId);});原来(何时(初始化).Activity(x => x.OfType< InitializeActivity>()).TransitionTo(Initialized));}}公共类InitializeActivity:Activity< SomeSagaState,InitializeCommand>{私有只读ISomeDependency _dep;公共InitializeActivity(ISomeDependency dep){_dep = dep ??抛出新的ArgumentNullException(nameof(dep));}公共异步任务执行(...){//做一点事}} 

解决方案

您至少需要使用MassTransit v7.0.4,尽管我建议使用最新版本.在该版本中添加了对InMemoryTestHarness的容器支持 .

>

Sample-Library 中,也有大量有关如何使用它的示例..>

To keep saga code simple I created activities that are executed when a saga event is triggered. Now I'd like to create tests for the saga using MT's test harness. I also need to mock dependencies from these activities. How can this be done in MT 7.0.2?

This question is similar to the one found here: How to use MassTransit test harness to test Consumer with constructor dependency injection?

Below is some pseudo code to exemplify my use case:

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

解决方案

You need at least v7.0.4 of MassTransit, though I'd suggest using the latest version. Container support for the InMemoryTestHarness was added in that version.

There are also extensive examples of how to use it in Sample-Library.

这篇关于如何使用MassTransit测试工具通过带有构造函数依赖项注入的Activity(Automatonymous.Binders.EventActivityBinder)测试sagas?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆