我正在尝试围绕自定义SynchronizationContext
实现编写单元测试。
此类的两个重要操作是Send
和Post
,其中Send
同步Post
调用委托和异步调用委托。
我想编写单元测试来验证这种行为,代表是同步或异步执行的。我不希望测试依赖于成功案例的延迟,因为它人为地延长了测试的执行时间(但失败导致延迟是合理的)。
最初,我考虑过使用 Tasks 来表示委托的执行:
var tcs = new TaskCompletionSource<object>();
var context = new CustomSynchronizationContext();
context.Send((state) => tcs.SetResult(null), null);
// Task should already be completed!
Assert.IsTrue(this.tcs.Task.IsCompleted);
但是,这并不能确保在测试运行程序可以继续之前,委托不会很快异步执行。
如何围绕上下文安排测试以确保Send
完成委托的块和Post
不完成委托,但委托都被调用?