c# - 使用 MassTransit 集成测试微服务

标签 c# integration-testing masstransit

我正在尝试围绕我使用 MassTransit 创建的一些服务创建黑盒集成测试。该服务的要点是它在 MassTransit channel 上接收消息,处理消息并在不同的 MassTransit channel 上发送消息(请注意,这不是请求-回复语义,而是管道中的一个组件):

IBusControl bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    var host = cfg.Host(new Uri("rabbitmq://localhost"),
        h =>
        {
            h.Username("guest");
            h.Password("guest");
        });

    cfg.ReceiveEndpoint(host, "Queue1", ep =>
    {
        ep.Handler<ItemStarted>(context =>
        {
            ItemFinished item = FinishMessage(context.Message);
            context.Publish(item); 
        });
    });
});

bus.Start();

为了对此进行测试,我认为我需要一种从总线接收消息的同步方式。有什么办法可以做到这一点:

IBusControl bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
    var host = cfg.Host(new Uri("rabbitmq://localhost"),
        h =>
        {
            h.Username("guest");
            h.Password("guest");
        }));

bus.Start();

bus.Publish(new ItemStarted());

// This is what does not seem to exist
ItemFinished finished = bus.Receive<ItemFinished>(timeout : Timespan.FromSeconds(5));

// Assertions about finished

有没有一种方法可以直接从 MassTransit 接收消息,而无需连接消费者类或 lambda?

最佳答案

MultiTestConsumer 可用于接收和跟踪测试期间产生的消息。你可以在这里看到这个类:

https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit/Testing/MultiTestConsumer.cs

你可以在这里看到它是如何使用的:

https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit.Tests/MultiTestConsumer_Specs.cs

它也可以用作常规的订阅消费者,它在 RabbitMQ 中设置绑定(bind)以接收发布的消息。

我建议查看 TestFramework,因为那里有很多异步测试助手。

关于c# - 使用 MassTransit 集成测试微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336808/

相关文章:

c# - 什么决定了我是否可以通过 using 函数使用一个对象?

c# - 将最后一项推送到 Observable(序列)

java - 继承 junit 测试类有哪些优点和缺点?

java - 从可配置的 JAR 运行 JMeter

大众交通多个消费者

message-queue - MassTransit:契约(Contract)类的模式和实践

c# - ServiceBusConnection 异常 - 接收传输出现故障

c# - 使用 StreamReader.ReadLine 读取具有特定 NewLine 字符序列的行

c# - 我应该缓存并重用从 HttpClientFactory 创建的 HttpClient 吗?

java - 无法加载ApplicationContext。无法创建集成测试