在 .Net 核心中对 BackgroundService 进行单元测试时要断言或验证的内容
What to assert or verify while unit testing the BackgroundService in .Net core
我有一个链接问题 . I read this,我正在尝试模拟托管服务中的依赖项。但我对断言或验证什么感到困惑。我正在考虑验证是否调用了 Mock Kafka Topic Consumer Manager
上的 StartConsumption
。但是要设置它,它 returns void
。我无法确定如何为模拟设置谓词。
services.AddSingleton(Mock.Of<IKafkaTopicConsumerManager>(_ =>
_.StartConsumption(
It.IsAny<CancellationToken>(),
It.IsAny<IMessageProcessingCapable>(),
It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<List<string>>(),
It.IsAny<string>(),
It.IsAny<int>())==void
));
但是在 void
它显示了无效的表达式项。下面是我的 Worker.cs 即 Hosted Service
.
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
_consumerManager.StartConsumption(
cancellationToken,
_messageProcessor,
_config.GetSection("Kafka:Servers").Get<string>(),
_config.GetSection("ConsumerGroup").Get<string>(),
_config.GetSection("Topics").Get<List<string>>(),
_config.GetSection("Kafka:TopicSuffix").Get<string>(),
_config.GetSection("ConsumerThreads").Get<int>());
}
只需添加模拟。既然被调用的成员是void,那么return就没什么了。因此不需要设置它来做任何事情。
services.AddSingleton(Mock.Of<IKafkaTopicConsumerManage>());
您可以做的是验证模拟成员在执行测试中的主题后被调用
var _mockedKafkaTopicConsumerManager = Mock.Get(serviceProvider.GetService<IKafkaTopicConsumerManage>());
_mockedKafkaTopicConsumerManager
.Verify(c => c.StartConsumption(
It.IsAny<CancellationToken>(),
_mockedMessageProcessor.Object,
It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<List<string>>(),
It.IsAny<string>(),
It.IsAny<int>()
),Times.Once);
我有一个链接问题 Mock Kafka Topic Consumer Manager
上的 StartConsumption
。但是要设置它,它 returns void
。我无法确定如何为模拟设置谓词。
services.AddSingleton(Mock.Of<IKafkaTopicConsumerManager>(_ =>
_.StartConsumption(
It.IsAny<CancellationToken>(),
It.IsAny<IMessageProcessingCapable>(),
It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<List<string>>(),
It.IsAny<string>(),
It.IsAny<int>())==void
));
但是在 void
它显示了无效的表达式项。下面是我的 Worker.cs 即 Hosted Service
.
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
_consumerManager.StartConsumption(
cancellationToken,
_messageProcessor,
_config.GetSection("Kafka:Servers").Get<string>(),
_config.GetSection("ConsumerGroup").Get<string>(),
_config.GetSection("Topics").Get<List<string>>(),
_config.GetSection("Kafka:TopicSuffix").Get<string>(),
_config.GetSection("ConsumerThreads").Get<int>());
}
只需添加模拟。既然被调用的成员是void,那么return就没什么了。因此不需要设置它来做任何事情。
services.AddSingleton(Mock.Of<IKafkaTopicConsumerManage>());
您可以做的是验证模拟成员在执行测试中的主题后被调用
var _mockedKafkaTopicConsumerManager = Mock.Get(serviceProvider.GetService<IKafkaTopicConsumerManage>());
_mockedKafkaTopicConsumerManager
.Verify(c => c.StartConsumption(
It.IsAny<CancellationToken>(),
_mockedMessageProcessor.Object,
It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<List<string>>(),
It.IsAny<string>(),
It.IsAny<int>()
),Times.Once);