我刚看完Jason Dolinger 在 MVVM 上的视频,我想澄清一下如何正确设置和单元测试我的视图模型的 ICommand 属性。
考虑以下带有 FooBarCommand ICommandProperty 的 ViewModel 类。
public class ViewModel : IViewModel
{
public ICommand FooBarCommand { get; private set; }
public bool CanExectuteFooBar()
{
return true;
}
public void FooBar()
{
//Do some FooBarish stuff
}
}
public interface IViewModel
{
void FooBar();
System.Windows.Input.ICommand FooBarCommand { get; }
}
public class FooBarCommand : ICommand
{
private ViewModel vm;
public FooBarCommand(ViewModel vm)
{
this.vm = vm;
}
public bool CanExecute(object parameter)
{
return vm.CanExectuteFooBar();
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
vm.FooBar();
}
}
因此,如果我对 ViewModel 的 FooBar 功能进行单元测试,我可以通过调用 testVM.FooBar() 或通过调用 testVM.FooBarCommand.Execute() 执行命令来运行 FooBar()。哪个是首选?我倾向于测试 FooBarCommand 属性,因为最终视图上的按钮被绑定到 FooBarCommand 属性而不是 FooBar() 方法。
此外,由于我的 View 将绑定到 IViewModel 而不是 ViewModel,我应该能够从 IViewModel 接口中省略 FooBar() 方法完全正确吗?