如何解决具有多个 ExecuteActivity 的 Masstransit Testharness 未按预期创建端点
我想编写一个测试来检查我的路由单是否按预期工作。我把它缩小到这个简化版。
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>());
}
}
}
此测试失败,但如果我将其中一个活动替换为具有另一种参数类型的活动,则它会起作用。例如
cfg.AddExecuteActivity<ActivityTwo,MyOtherMessage>().Endpoint(c => c.Name = "queue2");
失败的测试打印此日志:
信息:MassTransit[0] 已配置端点 queue2,执行活动:MasstransitTest.ActivityOne
信息:MassTransit[0] 配置端点 queue2,执行活动:MasstransitTest.ActivityTwo
dbug:MassTransit[0] 起始总线:loopback://localhost/
我认为问题是只配置了一个端点,但我不知道为什么。这是测试框架中的错误吗?
解决方法
当使用 .Endpoint
覆盖活动的执行或补偿端点时,arguments 或 log 类型必须是唯一的。
要更改具有通用参数或日志类型的活动的端点名称,请使用 ActivityDefinition
或 ExecuteActivityDefinition
public class ActivityOnExecuteActivityDefinition :
ExecuteActivityDefinition<ActivityOne,One>
{
public ActivityOnExecuteActivityDefinition()
{
EndpointName = "queue1";
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。