【问题标题】:How can I test a RoutedUICommand?如何测试 RoutedUICommand?
【发布时间】:2014-02-03 01:20:18
【问题描述】:

我有一个正在为其构建单元测试的应用程序。对于某些操作,我使用ApplicationCommands(例如ApplicationCommands.New)。有没有一种简单的方法可以在单元测试中的路由 UI 命令上调用 CanExecuteExecute?我想过实现一个模拟IInputElement,但这似乎需要做很多工作。有没有更好的办法?

[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? 有没有人知道在没有 ui 实际存在的情况下执行路由 ui 命令的方法?

我有命令和命令绑定,但是不知道如何创建命令源和命令目标。

【问题讨论】:

    标签: c# wpf unit-testing testing routed-commands


    【解决方案1】:

    您应该测试响应路由命令的实际ICommand 类。如果此路由命令仅由其中一个代码隐藏文件中的事件处理程序实现,那么我建议从这些文件中提取 ICommand 并对其进行测试。

    测试命令是否正确路由不是您应该编写的单元测试。相反,这应该是一个可以使用 coded UI testing via Visual Studio(或其他一些 GUI 测试框架)完成的集成测试。

    【讨论】:

    • 我的视图模型中实际上没有命令。我有一个CommandBinding 和一个CommandBindingCollection。该集合是我在 xaml 中使用的。如果我尝试从路由 UI 命令绑定中测试 ICommand 对象,CanExecute 始终为 false。
    • 这就是我第二句话的意思。您的代码不是非常可单元测试的设置您如何拥有它。为了使路由命令起作用,您的整个视图需要在 WPF 环境中创建和运行,因为这是将命令连接到绑定的原因。如果将CanExecute/Execute 处理程序提取到命令对象中,则测试起来会容易得多。
    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2014-07-19
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2021-04-08
    相关资源
    最近更新 更多