在.NET Core 2.0中,我有一个相当简单的MassTransit路由清单,其中包含2个活动。它是在使用者中构建和执行的,并且都与自动状态机联系在一起。一切都很好,尽管需要进行一些最终的彻底调整。
但是,我无法找出为我的使用者编写单元测试的最佳方法,因为它可以构建路由清单。我的使用者中有以下代码:
public async Task Consumer(ConsumerContext<ProcessRequest> context)
{
var builder = new RoutingSlipBuilder(NewId.NextGuid());
SetupRoutingSlipActivities(builder, context);
var routingSlip = builder.Build();
await context.Execute(routingSlip).ConfigureAwait(false);
}
我创建了SetupRoutingSlipActivities方法,因为我认为它可以帮助我编写测试以确保添加了正确的活动,并且它看起来像:
public void SetupRoutingSlipActivities(RoutingSlipBuilder builder, ConsumeContext<IProcessCreateLinkRequest> context)
{
builder.AddActivity(
nameof(ActivityOne),
new Uri("execute_activity_one_example_address"),
new ActivityOneArguments(
context.Message.Id,
context.Message.Name)
);
builder.AddActivity(
nameof(ActivityTwo),
new Uri("execute_activity_two_example_address"),
new ActivityTwoArguments(
context.Message.AnotherId,
context.Message.FileName)
);
}
我试图通过使用Moq模拟生成器和MassTransit InMemoryTestHarness来为SetupRoutingSlipActivities编写测试,但是我发现AddActivity方法不是虚拟的,因此无法这样验证:
aRoutingSlipBuilder.Verify(x => x.AddActivity(
nameof(ActivityOne),
new Uri("execute_activity_one_example_address"),
It.Is<ActivityOne>(y => y.Id == 1 && y.Name == "A test name")));
当我只是编写一个简化版本时,请忽略代码示例中的一些奇怪数据。
有人对此有任何建议吗?我还想测试以确保创建了RoutingSlipBuilder,但是由于该实例是在Consume方法中创建的,因此我不确定该怎么做!我在网上和通过MassTransit存储库中搜索了很多内容,但没有任何问题。
答案 0 :(得分:1)
看看如何编写Courier测试,有许多测试夹具可用于测试布线单活动。虽然没有充分的文档记录,但是单元测试是如何使用测试的有效证明。