在 xunit .net core 中禁用或模拟后台服务

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

我的项目中的startup.cs中有这行代码

services.AddHostedService<AkkaService>(sp => (AkkaService)sp.GetRequiredService<IEasyProcessor>());

当我运行测试时,我需要禁用此行。我不想使用环境变量。我只需要模拟或禁用此服务。 我在我的测试解决方案中模拟此服务,如下所示:

    Mock<IEasyProcessor> easyprocessor= new Mock<IEasyProcessor>();

    services.AddScoped<IEasyProcessor>(processor =>{ return easyprocessor.Object; });

但我收到此错误:

System.InvalidCastException: 'Unable to cast object of type 'Castle.Proxies.IEasyProcessorProxy' to type 'easy.api.Akka.AkkaService'.'
asp.net-core dependency-injection mocking xunit
1个回答
0
投票

有两种方法可以停止测试中的后台作业。

您可以删除服务,甚至可以使用IWebHostBuilder来模拟它们:

builder.ConfigureTestServices(services =>
 {
   services.RemoveAll<IHostedService>();

或者您可以手动调用 StopAsync 在开始时停止作业。

var job = Services.GetRequiredService<IHostedService>();
job.StopAsync();
© www.soinside.com 2019 - 2024. All rights reserved.