具有多个 ExecuteActivities 的公共交通测试工具不会按预期创建端点

Masstransit Testharness with multiple ExecuteActivities doesn't create Endpoints as expected

我想编写一个测试来检查我的路由单是否按预期工作。我将其缩小到这个简化版本。

namespace MasstransitTest
{
    public class Tests
    {
        private readonly InMemoryTestHarness _harness;

        public Tests()
        {

            var services = new ServiceCollection();

            services.AddLogging(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Debug));

            services.AddMassTransitInMemoryTestHarness(cfg =>
            {
                cfg.AddExecuteActivity<ActivityOne, MyMessage>()
                    .Endpoint(c => c.Name = "queue1");
                
                cfg.AddExecuteActivity<ActivityTwo, MyMessage>()
                    .Endpoint(c => c.Name = "queue2");
            });

            var serviceProvider = services.BuildServiceProvider(true);
            _harness = serviceProvider.GetRequiredService<InMemoryTestHarness>();
            _harness.Start();
        }

        [Test]
        public async Task Test1()
        {
            var routingSlipBuilder = new RoutingSlipBuilder(Guid.NewGuid());
            routingSlipBuilder.AddActivity("Activity1", new Uri("loopback://localhost/queue1"), new { MyMessage = new MyMessage()});
            routingSlipBuilder.AddActivity("Activity2", new Uri("loopback://localhost/queue2"), new { MyMessage = new MyMessage()});
            routingSlipBuilder.AddSubscription(new Uri("loopback://localhost/protocol-event-monitor"),RoutingSlipEvents.All, RoutingSlipEventContents.All);
            var routingSlip = routingSlipBuilder.Build();

            await _harness.Bus.Execute(routingSlip);

            Assert.That(await _harness.Sent.Any<RoutingSlipCompleted>());
        }
    }
}

此测试失败,但如果我将其中一个活动替换为 activity 和另一种参数类型,它会起作用。例如

 cfg.AddExecuteActivity<ActivityTwo, MyOtherMessage>().Endpoint(c => c.Name = "queue2");

失败的测试打印此日志:

info: MassTransit[0] Configured endpoint queue2, Execute Activity: MasstransitTest.ActivityOne
info: MassTransit[0] Configured endpoint queue2, Execute Activity: MasstransitTest.ActivityTwo
dbug: MassTransit[0] Starting bus: loopback://localhost/

我认为问题是只配置了一个端点,但我不知道为什么。这是测试框架中的错误吗?

当使用 .Endpoint 覆盖 activity 的执行或补偿端点时,参数log 类型必须是唯一的。

要更改具有共同参数或日志类型的活动的端点名称,请使用 ActivityDefinitionExecuteActivityDefinition

public class ActivityOnExecuteActivityDefinition :
    ExecuteActivityDefinition<ActivityOne, One>
{
    public ActivityOnExecuteActivityDefinition()
    {
        EndpointName = "queue1";
    }
}