WPF 中的单元测试视图

nan*_*nan 2 c# wpf unit-testing mvvm

我使用 Mock 来对 ViewModel 进行单元测试。我的问题是观点。我必须测试文本框的 KeyUp 事件。

在我的 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 }
                       );
    }
Run Code Online (Sandbox Code Playgroud)

我传递什么作为输入源?Keyboard.PrimaryDevice.ActiveSource返回空值。我尝试模拟输入源的PresentationSource,但抛出ProxyGenerationException。

She*_*dan 5

视图中不应该有任何业务逻辑……这就是 MVVM 的全部要点。因此,没有理由检验你的观点。

但是,如果您确实想测试事件处理程序中的某些逻辑,只需将其放入另一个方法中并从事件处理程序中调用它即可。然后您将能够单独测试该方法。看一下这个例子:

public void searchTextBox_KeyUp(object sender, KeyEventArgs e)
{
    EventHandlerCode();
}
Run Code Online (Sandbox Code Playgroud)

...

public void EventHandlerCode()
{
    // your handling code here
}
Run Code Online (Sandbox Code Playgroud)

EventHandlerCode您可以从单元测试中调用。