我有一个在 .net core 2.0 启动时启动的后台任务,继承自 backgroundservice,实现 StartAsync、StopAsync 和 ExecuteAsync。这个任务是根据一些业务逻辑定期更新数据库表中的一些数据。
虽然我可以将后台任务作为应用程序运行并使用日志、数据库检查和其他工具进行测试,但单元测试对于测试后台任务是否是必要的?如果是这样,如何将任务注册为具有依赖关系的服务并触发启动和停止方法来断言实际与预期?在测试基于计时器的 .net 核心 ihostedservice 后台任务时欣赏一些基本的示例单元测试方法。
这是我的基本测试开始,仅用于示例,但尚未完成。话虽如此,这只是一个想法,而不是确切的工作测试。这是需要社区帮助的内容。还可以添加更多断言,即 Assert.Verify()?
[Fact]
public async void Run_background_task_success()
{
//Arrange
IServiceCollection services = new ServiceCollection();
services.AddHostedService<BackgroundManagerTask>();
var serviceProvider = services.BuildServiceProvider();
var service = serviceProvider.GetService<IHostedService>() as BackgroundManagerTask;
var isExecuted = false;
if(await service.StartAsync(CancellationToken.None))
{
isExecuted = true;
}
await Task.Delay(10000);
Assert.True(isExecuted);
await service.StopAsync(CancellationToken.None);
}