我的项目中的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'.'
有两种方法可以停止测试中的后台作业。
您可以删除服务,甚至可以使用IWebHostBuilder来模拟它们:
builder.ConfigureTestServices(services =>
{
services.RemoveAll<IHostedService>();
或者您可以手动调用 StopAsync 在开始时停止作业。
var job = Services.GetRequiredService<IHostedService>();
job.StopAsync();