Как уже упоминалось в комментариях - эта документация устарела, но мои вопросы остались в силе. В конце концов, я решил не go с предложенным подходом настройки контейнера Docker для брокера сообщений, но вместо этого я использовал тестовый жгут (также предложенный выше). Я использую SpecFlow, поэтому общий код заключается в создании и запуске жгута на шаге BeforeScenario
, например:
[BeforeScenario]
public async Task BeforeScenario() {
_testHarness = new InMemoryTestHarness();
await _testHarness.Start();
TestStartup1.SetHarness(_testHarness);
TestStartup2.SetHarness(_testHarness);
// build WebHost and start both asp.net TestServer instances
}
[AfterScenario]
public async Task Cleanup() {
await _testHarness.Stop();
}
И получение экземпляра IBusControl
из жгута, внутри обоих тестов стартапы:
// test startup1
public override void UseMassTransit(IServiceCollection services) {
services.AddMassTransit(_ => {
// configure endpoints here, etc.
return _testHarness.BusControl;
}, RegisterConsumers);
}
// test startup2
public override void UseMassTransit(IServiceCollection services) {
services.AddMassTransit(_ => {
// configure endpoints here, etc.
_testHarness.Bus.ConnectReceiveEndpoint("your-endpoint", ep => ep.ConfigureConsumers(serviceProvider));
return _testHarness.BusControl;
}, RegisterConsumers);
}
Мне еще предстоит узнать, как сделать обработку сообщений синхронной, чтобы мне не пришлось ждать результатов, но в любом случае приведенный выше код решает мою проблему.