我将使用Silverlight单元测试框架来测试一些视图管理器类。某些测试需要触发“PropertyChanged”事件。
我目前正在使用“EnqueueConditional”和“WaitHandles”的组合。 示例1
我目前正在使用“EnqueueConditional”和“WaitHandles”的组合。 示例1
[TestMethod]
[Asynchronous]
[Timeout(1000)]
public void TestNotificationExample()
{
var manager = new UserManager();
var waitHandle = new ManualResetEvent(false);
manager.PropertyChanged += (sender, propChangArgs) =>
{
waitHandler.Set();
};
manager.DoTheThingThatTriggersNotification();
// The notification event fires aynshronously to this
EnqueueConditional (() => waitHandler.WaitOne(0));
// Enqueue other tests here....
EnqueueTestComplete();
}
这个方法是可行的。但我有一些疑问:
我是否真的需要使用WaitHandle?如果只使用bool,它的性能是否同样好?
例子2
bool fHasFiredEvent = false;
manager.PropertyChanged += (sender, propChangeArgs) =>
{
fHasFiredEvent = true;
}
manager.DoTheThingThatTriggersNotification();
EnqueueConditional (() => fHasFiredEvent);
EnqueueTestComplete();
如果我保留 WaitHandle,但失去 TimeoutAttribute 并在等待超时时进行超时,会更好吗?
示例3
[TestMethod]
[Asynchronous]
public void TestNotificationExample()
{
var manager = new UserManager();
var waitHandle = new ManualResetEvent(false);
manager.PropertyChanged += (sender, propChangArgs) =>
{
waitHandler.Set();
};
manager.DoTheThingThatTriggersNotification();
EnqueueCallback (() => Assert.IsTrue(waitHandler.WaitOne(1000));
EnqueueTestComplete();
}
现在我已经写了三个例子,它们都能工作。我的最后一个问题是:
- 哪一个性能最佳?(即使差别微小,只是纯学术上的好奇心。)
- 这三个例子中有没有基本缺陷?