Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MassTransit集成测试微服务_C#_Integration Testing_Masstransit - Fatal编程技术网

C# 使用MassTransit集成测试微服务

C# 使用MassTransit集成测试微服务,c#,integration-testing,masstransit,C#,Integration Testing,Masstransit,我正试图围绕使用MassTransit创建的一些服务创建黑盒集成测试。该服务的要点是,它在MassTransit通道上接收消息,处理消息并在不同的MassTransit通道上发送消息。注意,这不是请求-应答语义,而是管道中的一个组件: IBusControl bus = Bus.Factory.CreateUsingRabbitMq(cfg => { var host = cfg.Host(new Uri("rabbitmq://localhost"), h =&g

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

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,可用于接收和跟踪测试期间产生的消息。您可以在此处看到该类:

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

它还可以用作常规订阅的使用者,在RabbitMQ中设置绑定以接收已发布的消息


我建议您检查一下TestFramework,因为里面有很多异步测试助手。

MultiTestConsumer设计是否与RabbitMQ配合使用?我下载了源代码并运行了测试。当我按原样运行它们时,它们很好,但当我将使用多测试的基类更改为RabbitMqTestFixture时,所有测试都失败了。这是设计的吗?要与RabbitMQ一起使用,如果您试图接收发布消息,则需要使用.Configure方法将其连接到ReceiveEndpoint,以便创建exchange绑定。