wpfmvvm与单元测试
我一直在开发一个WPF应用程序,我正在使用ModelViewModel设计模式。我有许多来自视图的事件,它们导致ViewModel活动 从单元测试中引发这些事件的合理方法是什么?例如,我想模拟drop事件。我真的不想构建存根视图,只是为了引发事件 欢迎任何建议wpfmvvm与单元测试,wpf,unit-testing,mvvm,Wpf,Unit Testing,Mvvm,我一直在开发一个WPF应用程序,我正在使用ModelViewModel设计模式。我有许多来自视图的事件,它们导致ViewModel活动 从单元测试中引发这些事件的合理方法是什么?例如,我想模拟drop事件。我真的不想构建存根视图,只是为了引发事件 欢迎任何建议 谢谢。听起来好像您在ViewModel类中直接为drop事件提供了一个事件处理程序。将处理程序放在UI层中会更有意义吗?UI层将调用ViewModel中的函数?这样,单元测试就可以调用函数(就ViewModel而言,模拟拖放操作) 另外,
谢谢。听起来好像您在ViewModel类中直接为drop事件提供了一个事件处理程序。将处理程序放在UI层中会更有意义吗?UI层将调用ViewModel中的函数?这样,单元测试就可以调用函数(就ViewModel而言,模拟拖放操作)
另外,最好将ViewModel与UI代码分开。根据MVVM模式:
- 视图了解ViewModel—它将引用它作为具体实例或接口
- ViewModel根本不应该知道视图
class MyViewModel
{
public ICommand ClickCommand { get; set; }
}
<Button Command="{Binding Path=ClickCommand}" />
如果您这样做,那么您可以通过手动调用
myViewModel.HandleClick
进行测试。您不必费心对MyClickHandler
代码进行单元测试,因为它只有一行 不要引发事件,只需调用处理程序(这意味着它们应该是公共的,并且可能采用较少的以事件处理程序为中心的参数)。请查看Caliburn()中如何使用“操作”来实现这一点。为什么不使用模拟框架,例如Moq
?看看他们的快速入门,它有一个模拟事件的示例。网址是:
class MyViewModel
{
public void HandleClick(){ }
}
<Button Click="MyClickHandler">
//.xaml.cs file
public void MyClickHandler( Object sender, EventArgs e ) {
m_viewModel.HandleClick()
}