Я пытаюсь создать тесты интеграции черного ящика вокруг некоторых сервисов, которые я создал с помощью MassTransit. Суть службы заключается в том, что она получает сообщение на канале MassTransit, обрабатывает сообщение и отправляет сообщение на другом канале MassTransit (обратите внимание, что это не семантика Request-Reply, а больше компонента в конвейере):Интеграция тестирования микросервисов с использованием 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 без разводки класса потребителей или лямбды?
Является ли дизайн MultiTestConsumer для работы с RabbitMQ? Я загрузил исходный код и выполнил тесты. Они были прекрасны, когда я запускал их, как есть, но когда я изменил базовый класс Using_the_multi_test_consumer на RabbitMqTestFixture, все тесты не удались. Это по дизайну? –
Чтобы использовать его с помощью RabbitMQ, если вы пытаетесь получать сообщения, вы должны подключить их к ReceiveEndpoint (используя метод .Configure()), чтобы были созданы привязки обмена. –