【问题标题】:How do i Unit Test my RelayCommand using Moq?如何使用 Moq 对我的 RelayCommand 进行单元测试?
【发布时间】:2014-12-30 05:48:27
【问题描述】:

我有一个实现 ICommand 接口的 RelayCommand 类,它接受一个新的 Action 作为其构造函数的参数。这是非常基本的

例如,这是我在单击按钮时使用命令的方式。这段代码在我的 ViewModel 的构造函数中。

这段代码所做的只是打开一个 FolderBrowserDialog 并让用户选择一个文件夹。

OutputSelect = new RelayCommand(new Action<object>(folderSelect));

这是 viewModel 类中的一个方法

public void folderSelect(object obj)
        {
            var dlg = new FolderBrowserDialog();


            Nullable<bool> result = dlg.ShowDialog();

            if (result == true)
            {
                // Open document             
                string filename = dlg.SelectedPath;
                _model.OutputFolder = filename;
            }
        }

单击按钮后,方法 folderSelect 就会运行。

现在我想知道如何对我的应用程序的这个功能进行单元测试?

我是否为动作制作一个 Mock 并将其传递到我的 viewModel.OutputSelect.Execute() 中?

【问题讨论】:

  • 为什么不分类呢?制作一个显示文件夹对话框的服务(这只显示文件夹浏览器,因此不需要进行单元测试)。 VM 可以依赖此选择服务,您可以使用模拟接口对其进行单元测试。您不需要在测试或验证中看到 FolderBrowserDialog

标签: c# wpf unit-testing mvvm moq


【解决方案1】:

“模型视图视图模型”是一种架构模式,它为我们提供了用户界面层 (UI) 和业务层之间的清晰分离。 Button Command 属性是 ICommand 类型,当用户点击 Button 时,它在后台调用了 ICommand.Execute() 方法。 p>

因此,要进行单元测试,您可以通过直接调用 Execute(object parameter) 方法来做到这一点 在你的情况下是

OutputSelect.Execute(null)

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2012-06-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多