2014-01-14 2 views
1

У меня есть приложение, для которого я строю модульные тесты. Для некоторых операций я использую ApplicationCommands (например, ApplicationCommands.New). Есть ли простой способ вызвать CanExecute и Execute по команде маршрутизированного интерфейса в модульном тесте? Я думал о внедрении макета IInputElement, но это похоже на большую работу. Есть ли способ лучше?Как я могу проверить RoutedUICommand?

[TestMethod] 
public void NewDocument() 
{ 
    Assert.IsTrue(ApplicationCommands.New.CanExecute(null, mockTarget)); 
    ApplicationCommands.New.Execute(null, mockTarget); 
    Assert.IsTrue(workspace.OpenDocuments.Count == 1); 
} 

Похоже, что это очень похоже на этот вопрос why-does-my-command-canexecute-always-return-false-in-unit-test? Кто-нибудь знает способ, чтобы выполнить команду маршрутизируемого щ без щ на самом деле быть там?

У меня есть командная и командная привязка, но я не знаю, как создать источник команды и целевую команду.

ответ

0

Вы должны проверить фактический класс ICommand, который отвечает на перенаправленную команду. Если эта маршрутизированная команда реализована только обработчиками событий в одном из ваших файлов с кодом, я бы предложил вытащить из них ICommand и проверить это.

Проверка правильности маршрутизации команды - это не единичный тест, который вы должны писать. Вместо этого это должен быть интеграционный тест, который может быть выполнен с помощью coded UI testing via Visual Studio (или какой-либо другой графической оболочки GUI).

+0

У меня на самом деле нет команды в моей модели. У меня есть «CommandBinding» и «CommandBindingCollection». Коллекция - это то, что я использую в xaml. Если я попытаюсь проверить объект 'ICommand' из привязки команды маршрутизируемого интерфейса,' CanExecute' всегда ложь. – travis

+0

Вот что я получил с моим вторым предложением. Ваш код не очень-то тестируется с настройкой, как у вас есть. Для того, чтобы маршрутизированная команда работала, весь ваш вид должен быть создан и запущен в среде WPF, так как это то, что перехватывает команду привязки. Если вы вытащите обработчики 'CanExecute' /' Execute' в объект команды, это намного проще проверить. –