如何编写使用MVVM Light的Messenger的单元测试?

问题描述 投票:0回答:1

我正在为使用MVVM Light的Messenger的WPF应用程序编写一些单元测试。我们有几个看起来像这样的方法:

private void ExecuteViewTemplatesCommand()
{
    OpenViewMessage message = new OpenViewMessage();
    CurrentViewModel = message.ViewModel = ViewModelLocator.TemplateVM;
    Messenger.Default.Send<OpenViewMessage>(message);
}

我想我必须编写单元测试,它可以解决运行类型为void的方法的副作用,就像在这种情况下将消息分配给Messenger对象的属性一样。我如何针对这种情况进行单元测试?

c# wpf unit-testing mvvm-light
1个回答
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作为一个消息类,这将作为一个调解器类,它是一个信使

namespace something
{
    public class ClassC
    {
        //it can be blank
    }
}

然后创建一个B类

ClassB
{
    classC _classCMessage = new classC();
    MessengerInstace.Send(_classCMessage);

}

这里的要点是所有这一切都阻止了ClassA直接与ClassB对话,原因是我们试图避免任何类型的依赖,假设classB是一个WPF框架,我们会尽量避免依赖于它,以防有一天你决定切换到不同的框架

© www.soinside.com 2019 - 2024. All rights reserved.