如何对单元测试中的后台任务进行排队,使其能够自信地完成?



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

我不愿尝试包括System.Web组件并使用HostingEnvironment.QueueBackgroundWorkItem来做到这一点,但由于怀疑这是不起作用的:

system.invalidoperationException:"由于对象的当前状态,操作无效。'

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

那么,实现我的目标的最佳方法是什么?

如果您使用的是xunit或mstest,则您的 can 具有async测试方法,但它们必须返回Task对象:

[TestMethod]
public async Task TestFooAsync() {
     Int32 someValue = await someSource.GetValueAsync();
     Assert( 123, someValue );
}

使用 async void表示"火和孔",这就是为什么仅在事件手柄中使用而不应测试的原因。

最新更新