- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 BackgroundService 编写单元测试用例 Worker.cs
.我已阅读 Stack Overflow Question
但我仍然得到错误
"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.com\\devinet\\Configuration\\" + "ApiEndpoints.json", false, true)
.AddJsonFile("ApiEndpoints.local.json", true, true)
.AddJsonFile("\\\\charon.cmiprog.com\\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
到服务集合。您在构造函数中构建了一个,但未将其添加到测试中的服务集合中。
[Fact]
public async Task ExecuteAsync_Test() {
IServiceCollection services = new ServiceCollection();
services.AddSingleton<IConfiguration>(_config);
//...
关于c# - 在单元测试 .Net core 3.1 后台服务时,无法解析 IConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60387013/
我有一个 API,我正在尝试使用 XUnit 对其进行一些集成测试。这是我的 API Controller 构造函数: public class MyController : Controller {
我试图模拟顶级(不是任何部分的一部分)配置值(.NET Core 的 IConfiguration),但徒劳无功。例如,这些都不起作用(使用 NSubstitute,但它与 Moq 或我相信的任何模拟
我想问一下如何创建 ASP.NET Core 配置的实例,这与我在知道 appsettings.json 的 Controller 构造函数中需要它时创建的实例相同。文件 喜欢 _config = A
我正在尝试从 appsettings.json 读取连接字符串,我正在使用: services.AddSingleton(Configuration); 启动时的这一行抛出空值。我是 core2.0
我可能已经盯着这个很久了,但是最近几天我已经跳入了用于 asp.net 的 MVC6,虽然我真的很喜欢这个,但我似乎找不到一种方便的方式来访问它之后的配置在 Start.cs 中定义为 Configu
我正在尝试在我的应用程序中检索配置。 我已将 IConfiguration 传递给需要提取一些设置的服务类。 这个类看起来有点像这样: private IConfiguration _configur
我正在为 ServiceCollection 编写自己的扩展方法来注册我的模块的类型,并且我需要从集合中访问 IConfiguration 实例来注册我的选项。 扩展方法 public static
以下内容仅供引用。 我有一个包含以下内容的 secrets.json: { "Message": "I still know what you did last summer." } 我需要使
我正在制作 fixture到我的tests . 在我的 FixtureFactory我自己做 ServiceCollection : private static ServiceCollect
我一直在尝试解决这个问题,但什么也想不起来了...... 使用 token 的 Web 应用程序,但有些事情让我退缩。 var key = new SymmetricSecurityKey(Encod
通过项目移动类(class)后,IConfiguration 之一方法,GetValue , 停止工作。用法是这样的: using Newtonsoft.Json; using System; usi
我正在使用 C# 和 Core .NET 构建类库。我正在尝试使用 config.json 文件中的配置。以下是该文件的内容: config.json { "emailAddress":"some
出于某种原因,我们无法在启动时从 Azure KeyVault 检索 secret 值。虽然 secret 似乎可以通过 IConfiguration 接口(interface)在过程中使用的方法中获
我们可以像这样将 IConfiguration 注入(inject)到类中: //Controller AppSettings obj = new AppSettings(_configuration
出于某种原因,我们无法在启动时从 Azure KeyVault 检索 secret 值。虽然 secret 似乎可以通过 IConfiguration 接口(interface)在过程中使用的方法中获
.NET Core 配置允许使用很多选项来添加值(环境变量、json 文件、命令行参数)。 我只是无法弄清楚并找到如何通过代码填充它的答案。 我正在为配置的扩展方法编写单元测试,我认为通过代码将其填充
我有一个非常简单的方法需要进行单元测试。 public static class ValidationExtensions { public static T GetValid(this IC
我正在使用 asp.net + Autofac。 我正在尝试加载一个自定义 JSON 配置文件,并基于该文件创建/实例化一个 IConfiguration 实例,或者至少将我的文件包含到默认情况下 a
我通常会做以下事情 static void Main() { IConfiguration config = new ConfigurationBuilder()
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilde
我是一名优秀的程序员,十分优秀!