如何从单元测试中排队后台任务以确保它完成?

时间:2018-02-23 17:10:28

标签: c# asp.net multithreading unit-testing

我们有一组集成测试,可以在数据库中创建数据,并且需要在拆除时清理数据。我知道数据对于特定测试始终是唯一的,因此不会影响后续测试。因此,我想在后台线程中处理这些数据的清理,以减少对其他测试的影响。

我不情愿地尝试包含System.Web程序集并使用HostingEnvironment.QueueBackgroundWorkItem来执行此操作,但怀疑这不起作用:

  

System.InvalidOperationException:'由于对象的当前状态,操作无效。'

我尝试将我的代码放在异步方法中而不是等待,但怀疑测试已完成并在完成拆除之前终止了该过程。

那么实现目标的最佳途径是什么?

1 个答案:

答案 0 :(得分:1)

如果您正在使用XUnit或MSTest,那么可以拥有async个测试方法,但它们必须返回Task个对象:

[TestMethod]
public async Task TestFooAsync() {

     Int32 someValue = await someSource.GetValueAsync();
     Assert( 123, someValue );
}

使用async void表示"即发即弃",这就是为什么它只应该用在事件处理程序中,而不是用于测试。