【发布时间】:2020-05-26 12:52:34
【问题描述】:
我已经开发了一个使用 MVVM 作为架构的 WPF 应用程序,并且正在编写一些单元测试作为其中的一部分。在我看来,我有一个绑定到 ViewModel 中的属性的按钮,如下所示。
视图模型
public ICommand MoreInfoCommand
{
get
{
if (_moreInfoCommand == null)
{
_moreInfoCommand = new RelayCommand(parameter => OpenLink());
}
return _moreInfoCommand;
}
}
private void OpenLink()
{
try
{
Process.Start("https://www.google.com/");
}
catch
{
// catch error...
}
}
在我的单元测试中,我创建了以下单元测试:
单元测试
[Description("Test MoreInfoCommand")]
[TestMethod]
public void TestMoreInfoCommand()
{
viewModel vm = new viewModel();
Assert.IsTrue(vm.MoreInfoCommand.CanExecute(null));
}
目前这会测试该属性以查看在 UI 中单击按钮时是否可以执行相关方法。这会在条件得到满足时通过,但是我的理解是我还需要测试功能。考虑到这一点,例如,我如何测试单击按钮时是否发生了正确的功能。即,如何测试由于在 UI 中单击按钮而执行 ICommand MoreInfoCommand 时发生的情况。
我知道可以直接测试私有方法,但是在我的单元测试中我应该检查功能,如果是,我该怎么做。
提前致谢。
【问题讨论】:
-
在您的情况下,您的命令会生成一个进程,因此您的单元测试可以检查该进程是否正在运行?
-
我如何在单元测试中检查进程是否正在运行?
-
你没有。您应该验证该方法是否仅被调用。这就是您正在测试的视图模型的责任有多远。有关如何执行此操作的示例,请参见我的答案。您需要模拟对静态方法的调用。
标签: c# wpf unit-testing mvvm icommand