所以,假设我的测试类似于
[TestMethod]
[Asynchronous]
public void MyTest() {
MyObject m = new MyObject();
m.DoAsyncStuff();
EnqueueConditional(() => m.TaskComplete);
EnqueueCallback(() => Assert.IsTrue(m.ValidState));
EnqueueTestComplete();
}
EnqueueConditional
如何运作?假设MyObject
没有属性更改通知或任何内容。我假设EnqueueConditional
定期轮询变量?但我不确定。
答案 0 :(得分:3)
这正是它的作用。它每秒多次轮询m.TaskComplete
变量(我不知道有多少)。这是一个黑客,你不会想要它在生产代码中,但它适用于测试框架,并且它确实简化了许多其他代码。
例如,在生产代码中,您可能希望使MyObject实现INotifyPropertyChanged,然后使用Reactive Extensions订阅INPC通知。但对于那些在测试代码中无处不在的简单条件,这将是一项额外的工作,而且我认为Jeff Wilcox对他如何实现这一点做了正确的调用,不过它可能是hacky。