。Net核心中对BackgroundService进行单元测试时要声明或验证的内容

问题描述 投票:0回答:1

我有一个关联的问题here。我读了this,正在尝试模拟托管服务中的依赖关系。但是我对于断言或验证什么感到困惑。我正在考虑验证StartConsumption上的Mock Kafka Topic Consumer Manager是否被调用。但是要进行设置,它将返回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>());
}
c# unit-testing .net-core background-service
1个回答
0
投票
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);
© www.soinside.com 2019 - 2024. All rights reserved.