我正在尝试MVVM Light,部分受到EventToCommand功能的启发,这些功能似乎可以更轻松地在视图模型和XAML中处理我的应用程序外部的拖放。但是我对如何对RelayCommand进行单元测试感到困惑。我的RelayCommand简单地声明了
public RelayCommand<DragEventArgs> DropFile { get; private set; }
然后在ViewModel构造函数中分配功能,而不是内联但使用ViewModel上的方法
this.DropFile = new RelayCommand<DragEventArgs>(dropFileHandler);
当我为DropFile RelayCommand编写单元测试时,我无法看到要调用的内容?我应该打电话吗
testTarget.DropFile.Execute(params)
以及如何构造params,因为DragEventArgs只有一个空的构造函数,而它的关键属性只是getter而不是setter?
答案 0 :(得分:2)
对于标准命令以及MVVM-Light特定的中继命令都是如此。
需要单元可测试的逻辑应该在viewmodel中作为方法实现,然后从命令中调用。
命令中剩下的内容应该是从UI中提取信息的逻辑,即将参数转换为适当的类型并将其传递。
这样,作为实体的视图模型是可单元测试的,命令保持非常薄,每个人都高兴=]。
N.B。如果你想对你的单元测试特别严格,那么转换应该在ViewModel的方法中进行,但通常只要它可以处理一个null参数然后你的所有集合,这就是我变得懒惰的原因。
希望有所帮助