我一直在开发一个WPF应用程序,使用ModelViewViewModel设计模式。我的视图中有许多事件,这些事件会导致ViewModel的活动。
那么,在单元测试中如何合理地触发这些事件呢?例如,我想模拟drop事件。我不想构建一个存根视图,只是为了触发该事件。
欢迎任何建议。
谢谢。
我一直在开发一个WPF应用程序,使用ModelViewViewModel设计模式。我的视图中有许多事件,这些事件会导致ViewModel的活动。
那么,在单元测试中如何合理地触发这些事件呢?例如,我想模拟drop事件。我不想构建一个存根视图,只是为了触发该事件。
欢迎任何建议。
谢谢。
根据MVVM模式:
如果需要处理事件,那么我知道的有两种方法:
1:在你的视图模型中公开一个命令,并使用数据绑定来触发它。这是我的首选方式,例如:
class MyViewModel
{
public ICommand ClickCommand { get; set; }
}
<Button Command="{Binding Path=ClickCommand}" />
myViewModel.ClickCommand.Execute
来测试命令。.xaml.cs
文件中编写绝对最少的内容来处理事件并调用该函数,例如:class MyViewModel
{
public void HandleClick(){ }
}
<Button Click="MyClickHandler">
//.xaml.cs file
public void MyClickHandler( Object sender, EventArgs e ) {
m_viewModel.HandleClick()
}
myViewModel.HandleClick
来进行测试。你不需要费心去进行单元测试MyClickHandler
代码,因为它只有一行!听起来你在ViewModel类中直接为drop事件设置了事件处理程序。将处理程序放在UI层中,然后调用ViewModel中的函数会更有意义吗?这样,您的单元测试只需调用该函数(就ViewModel而言,模拟拖放操作即可)。
此外,这将更好地将您的ViewModel与UI代码分离。
Moq
?看看它们的快速入门,里面有关于模拟事件的示例。链接是:http://code.google.com/p/moq/wiki/QuickStart