【问题标题】:Testing MassTransit Subsciber测试 MassTransit 订阅者
【发布时间】:2016-09-12 02:43:41
【问题描述】:

我需要测试正在使用 MassTransit 的订阅者。

下面是示例代码:

using System;
using MassTransit;

public class AnimalSubscriber : Consumes<Animal>.Context
{
    public void Consume(IConsumeContext<Animal> message)
    {
        //.. my code here..
    }
}

现在我不知道如何测试订阅者。如果有人可以让我知道一些细节;这将非常有帮助!

到目前为止,我愚蠢地想创建一个 AnimalSubscriber 的 Object 并调用 Consume 方法。

[TestFixture]
public class Test
{
    [Test]
    public void SearchAnimals()
    {
        AnimalSubscriber subscriber = new AnimalSubscriber();
        Animal request = new Animal
        {
            Id : 1,
            Name : "Tiger"
        };

        //Not sure how to mock this IReceiveContext.
        IReceiveContext context = new ReceiveContext();

        IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request); 

        subscriber.Consume(null);
    }
}

但我被下面的代码行卡住了:

IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request); //<- Not sure how to mock this IReceiveContext.

错误:“MassTransit.Context.ReceiveContext”类型没有 构造函数定义

需要一些建议!

【问题讨论】:

    标签: c# unit-testing nunit masstransit


    【解决方案1】:

    如果您使用的是 MassTransit v2(基于您上面指定的接口确实是这种情况),您可以使用 Testing 命名空间来构建您的测试。

    v2 存储库分支中提供了一个示例单元测试:https://github.com/MassTransit/MassTransit/blob/v2-master/src/MassTransit.Tests/Testing/ConsumerTest_Specs.cs#L19

    例如,可以设置一个测试夹具来构建您的消费者并向其发送消息:

    _test = TestFactory.ForConsumer<AnimalSubscriber>()
        .InSingleBusScenario()
        .New(x =>
            {
                x.ConstructUsing(() => new AnimalSubscriber());
    
                x.Send(new Animal(), (scenario, context) => context.SendResponseTo(scenario.Bus));
            });
    
    _test.Execute();
    

    然后您可以围绕该测试构建断言,例如:

    _test.Sent.Any<A>().ShouldBeTrue();
    

    请注意,这仅适用于 v2,Testing 命名空间虽然存在于 v3 中,但还不能完全正常工作(它没有在移动到 async 后幸存下来,而且我没有花时间完全了解它还在工作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多