使用 MassTransit 集成测试微服务
Integration testing microservices using MassTransit
我正在尝试围绕我使用 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 接收消息而无需连接消费者 class 或 lambda?
有一个 MultiTestConsumer
可用于接收和跟踪测试期间生成的消息。您可以在此处查看 class:
https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit/Testing/MultiTestConsumer.cs
你可以在这里看到它是如何使用的:
它也可以用作常规的订阅消费者,它在 RabbitMQ 中设置绑定以接收发布的消息。
我建议查看 TestFramework,因为那里有很多异步测试助手。
我正在尝试围绕我使用 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 接收消息而无需连接消费者 class 或 lambda?
有一个 MultiTestConsumer
可用于接收和跟踪测试期间生成的消息。您可以在此处查看 class:
https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit/Testing/MultiTestConsumer.cs
你可以在这里看到它是如何使用的:
它也可以用作常规的订阅消费者,它在 RabbitMQ 中设置绑定以接收发布的消息。
我建议查看 TestFramework,因为那里有很多异步测试助手。