Как выполнить модульное тестирование класса с помощью System.Windows.Threading.Dispatcher - PullRequest
1 голос
/ 01 июля 2010

Как мне выполнить модульное тестирование класса, который использует System.Windows.Threading.Dispatcher?

Я следую шаблону MVVM в настройке WPF.В рамках этого я создаю класс DispatchingBlah по образцу DispatchingQuoteSource, который я видел в этом видео (см. 1:06:16 ish).

Я хочучтобы проверить, что мой класс поставил в очередь правильные вещи для объекта диспетчера, но у меня возникли проблемы с выяснением, как это сделать.У меня нет возможности (насколько я могу найти) синхронно очистить очередь, чтобы увидеть влияние объектов в очереди.Также я не вижу, как запросить очередь, чтобы проверить, что было добавлено.

Нужно ли придумывать какой-то интерфейс вокруг класса System.Windows.Threading.Dispatcher?

Ответы [ 2 ]

0 голосов
/ 01 июля 2010

На самом деле, уже существует лучшее решение, чем интерфейс вокруг класса диспетчера.Это называется SynchronizationContext .Это абстракция идеи Dispatcher, которая также работает для Windows Forms (с использованием ISynchronizeInvoke).Таким образом, вы также получаете преимущества дополнительного повторного использования для вашего класса.

Библиотека Nito.Async имеет несколько типов, которые полезны при выполнении модульного тестирования с SynchronizationContext;он сам имеет много модульных тестов, использующих эти классы.

0 голосов
/ 01 июля 2010

Я бы спрятал класс диспетчера за интерфейсом и использовал бы для проверки фиктивный диспетчер (или просто подделанный вручную).Таким образом, вы можете проверить, что были сделаны правильные вызовы, не пытаясь на самом деле протестировать фактического диспетчера.

Это, конечно, при условии, что вы хотите протестировать виртуальную машину и доверяетедиспетчер.Даже в этом случае, вероятно, лучше тестировать диспетчер отдельно.

...