如何将测试使用者添加到配置为在集成测试中使用 LocalStack 的 MassTransit

问题描述 投票:0回答:1

我已将 MassTransit 配置为使用 LocalStack 进行本地开发。对于集成测试,我们的测试设置是使用尽可能多的依赖项的 Docker 映像,以使事情尽可能接近生产。

我创建了一个 TestConsumer 类。如果 WebApi 项目使用

AddConsumer<TestConsumer>()
作为
AddMassTransit(...)
调用的一部分,那么集成测试就可以正常工作 - 使用 localstack。

但是,WebApi 项目不应该向生产代码中添加测试内容。是的,我可以在注册周围有一个 if 语句,但这也是不好的做法(在我看来)。

我希望集成测试的

WebApplicationFactory.ConfigureWebHost(...)
方法能够针对消费者。在我看来,这是最好的,因为我们的 Api 项目中没有测试代码。

如果您多次调用

AddMassTransit(...)

MassTransit 会抛出错误。有一个
AddMassTransitTestHarness(...)
方法,但该方法会删除所有 MassTransit 配置并将其替换为内存队列 - 绕过 localstack。

我不喜欢这个选项,因为我希望我的集成测试尽可能接近生产。我可以在

AddMassTransitTestHarness(...)
调用中重复注册,但这只会导致潜在的错误。我可以有一些共享的静态方法,使配置大部分保持在一个地方,如果我找不到更好的解决方案,那么我最终会走这条路。

有谁知道在

WebApplicationFactory.ConfigureWebHost(...)
中注册 MassTransit 消费者(和生产者)的内置方法,而无需重新进行所有 MassTransit 注册?

谢谢。

c# testing masstransit localstack
1个回答
0
投票

因此,如果您想向 WebApplicationFactory 添加临时使用者,您可以考虑尝试类似的操作。

var client = new WebApplicationFactory<Program>()
  .WithWebHostBuilder(builder => 
  {
    builder.ConfigureServices(services => 
    {
      services.RegisterConsumer<AdHocTestConsumer>();
    });
  }).CreateDefaultClient();

这应该能让你得到我相信你正在寻找的东西。请注意,扩展方法

RegisterConsumer
位于命名空间
MassTransit.Configuration

© www.soinside.com 2019 - 2024. All rights reserved.