我正在为使用MVVM Light的Messenger的WPF应用程序编写一些单元测试。我们有几种方法看起来像这样:
private void ExecuteViewTemplatesCommand()
{
OpenViewMessage message = new OpenViewMessage();
CurrentViewModel = message.ViewModel = ViewModelLocator.TemplateVM;
Messenger.Default.Send<OpenViewMessage>(message);
}
我想我必须编写单元测试,它可以解决运行类型为void的方法的副作用,就像在这种情况下将消息分配给Messenger对象的属性一样。请问如何针对这种情况进行单元测试?
答案 0 :(得分:0)
为了编写mvvm light的单元测试,您需要先注册该消息,并知道何时发送消息 假设你的viewmodel中有2个类不紧密耦合,我们将它们称为classA和classB。以下是可用于注册和发送消息的过程。
ClassA //register the message
{
MessengerInstance.Register<//in here you can put the class that you want to register, for the sake to simplify the example, we'll introduce this as classC>(this, DelegateFunctionHanlder);
}
private void DelegateFunctionHanlder(classC message)
{
//in here, we'll do something
}
然后你需要创建classC作为messageclass,这将作为mediator类,它是一个messenger
namespace something
{
public class ClassC
{
//it can be blank
}
}
然后创建一个ClassB
ClassB
{
classC _classCMessage = new classC();
MessengerInstace.Send(_classCMessage);
}
这里的要点是所有这一切都阻止ClassA直接与ClassB对话,原因是我们试图避免任何类型的依赖,假设classB是一个WPF框架,我们将尽量避免依赖于它以防万一有一天你决定改用不同的框架