Ожидание запуска события в модульных тестах Silverlight
Я использую Silverlight Unit Testing Framework для тестирования некоторых классов View Manager. Некоторые тесты требуютPropertyChanged события, которые будут уволены.
В настоящее время я использую комбинацию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, но потерял атрибут Timeout и тайм-аут на ожидании?
Пример 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();
}
Итак, я написал три примера, и все они работают. Итак, мой последний вопрос
Что будет иметь лучшую производительность? (Несмотря на то, что разница незначительна, и она чисто академическая Яда Яда Яда. Это интересно само по себе.)У любого из трех примеров есть фундаментальные недостатки?