测试MassTransit状态机saga活动

测试MassTransit状态机saga活动,masstransit,automatonymous,Masstransit,Automatonymous,我正试图在一个定制的活动上进行单元测试,这是我为MassTransit状态机传奇所做的 它看起来像这样: public class UpdateActivity : Activity<UpdateState> { private readonly ConsumeContext _consumeContext; private readonly ILogger<UpdateActivity> _logger; public UpdateActivi

我正试图在一个定制的
活动上进行单元测试,这是我为MassTransit状态机传奇所做的

它看起来像这样:

public class UpdateActivity : Activity<UpdateState>
{
    private readonly ConsumeContext _consumeContext;
    private readonly ILogger<UpdateActivity> _logger;

    public UpdateActivity(
        ConsumeContext consumeContext,
        ILogger<UpdateActivity> logger
    )
    {
        _consumeContext = consumeContext;
        _logger = logger;
    }

    public void Probe(ProbeContext context) => context.CreateScope(nameof(UpdateActivity));

    public void Accept(StateMachineVisitor visitor) => visitor.Visit(this);

    public async Task Execute(BehaviorContext<UpdateState> context, Behavior<UpdateState> next)
    {
        await DoStuffAsync(context.Instance);
        await next.Execute(context).ConfigureAwait(false);
    }

    public async Task Execute<T>(BehaviorContext<UpdateState, T> context, Behavior<UpdateState, T> next)
    {
        await DoStuffAsync(context.Instance);
        await next.Execute(context).ConfigureAwait(false);
    }

    public Task Faulted<TException>(BehaviorExceptionContext<UpdateState, TException> context, Behavior<UpdateState> next) where TException : Exception
        => next.Faulted(context);

    public Task Faulted<T, TException>(BehaviorExceptionContext<UpdateState, T, TException> context, Behavior<UpdateState, T> next) where TException : Exception
        => next.Faulted(context);
}
MassTransit必须允许测试状态机以及使用依赖注入的活动


考虑到这些线束的可用性,“与模拟隔离测试”的想法是毫无意义的。

感谢您的快速回复!我一直在研究这个问题,但我就是不知道如何单独测试活动?我已经使用测试工具为整个故事设置了测试,但我有一些具有复杂逻辑的活动,在这些活动中,最好只在测试中
new Activity()
,并基于多个不同的输入进行断言。我没有提供任何方法来单独测试活动,我不确定这将提供什么价值,和在状态机的上下文中测试它相比,似乎太过分了。好吧!那我至少知道了。谢谢我想我可以操纵状态机的状态,以便在活动级别上获得我想要的测试。
    public class UpdateActivity : Activity<UpdateState, IDataUpdatedEvent>
    {
        private readonly ILogger<UpdateActivity> _logger;

        public UpdateActivity(
            ILogger<UpdateActivity > logger
        )
        {
            _logger = logger;
        }

        public void Probe(ProbeContext context) => context.CreateScope(nameof(UpdateActivity));

        public void Accept(StateMachineVisitor visitor) => visitor.Visit(this);

        public async Task Execute(BehaviorContext<UpdateState, IDataUpdatedEvent> context, Behavior<UpdateState, IDataUpdatedEvent> next)
        {