我有一个关联的问题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>());
}
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);