2015-02-18 2 views
0

Я использовал Mock для модульного тестирования ViewModels. Моя проблема связана с представлениями. Я должен проверить событие KeyUp текстового поля.Тестирование единиц измерения в WPF

В моем классе ViewTest у меня есть следующий код.

View1 ViewTarget = null; 

[TestInitialize()] 
public void MyTestInitialize() 
{ 
    ViewTarget = new Veiw1(); 
} 

[TestMethod] 
    public void searchTextBox_KeyUpTest() 
    { 

     TextBox element = new TextBox(); 
     element.RaiseEvent(
       new KeyEventArgs(
        Keyboard.PrimaryDevice, 
        Keyboard.PrimaryDevice.ActiveSource, 
        0, 
        Key.Enter) { RoutedEvent = Keyboard.KeyUpEvent } 
         ); 
    } 

Что мне передать в качестве источника входного сигнала? Keyboard.PrimaryDevice.ActiveSource возврат null. Я попытался издеваться над PresentationSource для источника ввода, но выбрал исключение ProxyGenerationException.

+1

В представлениях не должно быть никакой бизнес-логики ... вот в чем смысл MVVM. Поэтому не должно быть никаких оснований проверять ваши взгляды. – Sheridan

+0

Вы правы. Но этот код был написан около 2 лет назад, и меня просят проверить его. Я в тупике. – nan

ответ

2

В представлениях не должно быть никакой бизнес-логики ... вот в чем смысл MVVM. Поэтому не должно быть никаких оснований проверять ваши взгляды.

Однако, если вы действительно хотите протестировать некоторую логику в обработчике событий, просто поместите его в другой метод и вызовите это из обработчика событий. Затем вы сможете протестировать этот метод отдельно. Посмотрите на этот пример:

public void searchTextBox_KeyUp(object sender, KeyEventArgs e) 
{ 
    EventHandlerCode(); 
} 

...

public void EventHandlerCode() 
{ 
    // your handling code here 
} 

Вы можете позвонить EventHandlerCode из вашего модульного теста.

Смежные вопросы