在对.Net core 3.1后台服务进行单元测试时,无法解析IConfiguration

编程入门 行业动态 更新时间:2024-10-23 01:57:04
本文介绍了在对.Net core 3.1后台服务进行单元测试时,无法解析IConfiguration的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试为BackgroundService Worker.cs 编写单元测试用例。我已阅读堆栈溢出问题

I'm trying to write unit test case for the BackgroundService Worker.cs. I have read Stack Overflow Question

但仍然出现错误

无法解析类型为'Microsoft.Extensions.Configuration的服务。

"Unable to resolve service for type 'Microsoft.Extensions.Configuration.IConfiguration' while attempting to activate 'AutoClueArchiver.Worker'.

public WorkerTests() { _config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", true, true) .AddJsonFile("appsettings.Development.json", true, true) .AddJsonFile("appsettings.local.json", true, true) .AddJsonFile("\\\\charon.cmiprog\\devinet\\Configuration\\" + "ApiEndpoints.json", false, true) .AddJsonFile("ApiEndpoints.local.json", true, true) .AddJsonFile("\\\\charon.cmiprog\\devinet\\Configuration\\" + "Kafka.json", false, true) .AddEnvironmentVariables().Build(); _mockedKafkaTopicConsumerManager =new Mock<IKafkaTopicConsumerManager>(); _mockedMessageProcessor=new Mock<IMessageProcessingCapable>(); } [Fact] public async Task ExecuteAsync_Test() { IServiceCollection services=new ServiceCollection(); services.AddSingleton<IConfigEntriesClientService, ConfigEntriesClientServiceInjectable>(); services.AddSingleton(typeof(IProducer), s => new KafkaProducer(s.GetRequiredService<IProducer<string, string>>(), s.GetRequiredService<IConfiguration>().GetValue<string>("Shared:Kafka:TopicSuffix"))); services.AddSingleton(typeof(IProducer<string, string>), c => new ProducerBuilder<string, string>(KafkaConfigs(c)).Build()); services.AddHttpClient(); services.AddScoped<IPolicyApiClient, PolicyApiClient>(); services.AddTransient<IFilterMessages, MessageFilter>(); services.AddTransient<IArchiveAutoClues, Archiver>(); services.AddTransient<IFileSystem, FileSystem>(); services.AddTransient<ISaveDocument, DocumentManager>(); services.AddTransient<IKafkaTopicConsumerManager, KafkaTopicConsumerManager>(); services.AddTransient<IMessageProcessingCapable, ConsumerInitializer>(); services.AddTransient<Consumer>(); services.AddTransient<IExceptionPublisher, ExceptionPublisher>(); services.AddTransient<IHttpContextAccessor, HttpContextAccessor>(); services.AddScoped(sp => new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }); services.AddHttpClient<IBaseApiClient, BaseApiClient>().ConfigurePrimaryHttpMessageHandler( sp => new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate } ); var worker=services.AddHostedService<Worker>(); var serviceProvider=services.BuildServiceProvider(); var backgroundService = serviceProvider.GetService<IHostedService>() as Worker; await backgroundService?.StartAsync(CancellationToken.None); await Task.Delay(1000); await backgroundService?.StopAsync(CancellationToken.None); //await backgroundService.ExecuteAsync(new CancellationToken()); //Any way to access ExecuteAsync here since I get protection level error as //ExecuteAsync is protected _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); }

推荐答案

我看不到你在哪里将 IConfiguration 添加到服务集合。您可以在构造函数中构建一个,但不要将其添加到测试中的服务集合中。

I do not see where you add IConfiguration to the service collection. You build one in the constructor but do not add it to the service collection in the test.

[Fact] public async Task ExecuteAsync_Test() { IServiceCollection services = new ServiceCollection(); services.AddSingleton<IConfiguration>(_config); //...

更多推荐

在对.Net core 3.1后台服务进行单元测试时,无法解析IConfiguration

本文发布于:2023-11-15 13:50:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1595008.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:在对   后台   单元测试   Net   IConfiguration

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!