我有一个QueueTask托管服务(.Net-Core的新后台服务),我想测试.我的queuedHosted服务看起来像这样:
public QueuedHostedService(IServiceProvider serviceProvider, IBackgroundTaskQueue taskQueue, ILoggerFactory loggerFactory)
{
TaskQueue = taskQueue;
_logger = loggerFactory.CreateLogger<QueuedHostedService>();
_serviceProvider = serviceProvider;
}
protected async override Task ExecuteAsync(CancellationToken stoppingToken)
{
using (var scope = _serviceProvider.CreateScope())
{
while (false == stoppingToken.IsCancellationRequested)
{
var workItem = await TaskQueue.DequeueAsync(stoppingToken);
try
{
await workItem(scope.ServiceProvider, stoppingToken);
}
catch (Exception ex)
{
this._logger.LogError(ex, $"Error occurred executing {nameof(workItem)}.");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它只是从队列中读取任务并在它们进入时执行它们.我已经验证了托管服务正在生产中.我为它写了一个测试:
[TestMethod]
public async Task Verify_Hosted_Service_Executes_Task()
{
IServiceCollection services = new ServiceCollection();
services.AddSingleton<ILoggerFactory, NullLoggerFactory>();
services.AddHostedService<QueuedHostedService>();
services.AddSingleton<IBackgroundTaskQueue, BackgroundTaskQueue>();
var serviceProvider …Run Code Online (Sandbox Code Playgroud) c# mstest .net-core asp.net-core asp.net-core-hosted-services
对于集成测试 Asp.Net Core 应用程序,我们有WebApplicationFactory。但是如何测试不是 Web 应用程序的Worker( ) 呢?HostedService我不想像这个问题那样复制 SUT 中的整个 DI 配置。是否可以使用原始配置并覆盖一些依赖项,就像我们在WebApplicationFactory.WithWebHostBuilder中对 Web 应用程序所做的那样?