C# 使用MassTransit集成测试微服务
我正试图围绕使用MassTransit创建的一些服务创建黑盒集成测试。该服务的要点是,它在MassTransit通道上接收消息,处理消息并在不同的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
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绑定。