我们有一组集成测试,可以在数据库中创建数据,并且需要在拆除时清理数据。我知道数据对于特定测试始终是唯一的,因此不会影响后续测试。因此,我想在后台线程中处理这些数据的清理,以减少对其他测试的影响。
我不情愿地尝试包含System.Web
程序集并使用HostingEnvironment.QueueBackgroundWorkItem
来执行此操作,但怀疑这不起作用:
System.InvalidOperationException:'由于对象的当前状态,操作无效。'
我尝试将我的代码放在异步方法中而不是等待,但怀疑测试已完成并在完成拆除之前终止了该过程。
那么实现目标的最佳途径是什么?
答案 0 :(得分:1)
如果您正在使用XUnit或MSTest,那么可以拥有async
个测试方法,但它们必须返回Task
个对象:
[TestMethod]
public async Task TestFooAsync() {
Int32 someValue = await someSource.GetValueAsync();
Assert( 123, someValue );
}
使用async void
表示"即发即弃",这就是为什么它只应该用在事件处理程序中,而不是用于测试。