В .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)
);
}
Я попытался просто написать тесты для SetupRoutingSlipActivities, используя конструктор макетов Moq и MassTransit InMemoryTestHarness, но обнаружил, что метод 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, но ничего не выделялось.