在 .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);