如何使用MVVM Light's Messenger编写单元测试

本文关键字:Messenger 单元测试 何使用 MVVM Light | 更新日期: 2023-09-27 18:18:30

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

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

我认为我必须编写单元测试,以防止运行void类型的方法所产生的副作用,例如在本例中将消息分配给Messenger对象的属性。请问如何针对这种情况进行单元测试?

如何使用MVVM Light's Messenger编写单元测试

为了编写mvvm light的单元测试,您需要首先注册消息,并知道何时发送消息假设你的视图模型中有两个不是紧密耦合的类,我们称它们为类a和类b。下面是可用于注册和发送消息的过程。

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
}

然后您需要将类c创建为消息类,这将充当中介类,这是一个信使

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

然后创建一个类b

ClassB
{
    classC _classCMessage = new classC();
    MessengerInstace.Send(_classCMessage);
}
这里的要点是,所有这些都阻止了ClassA直接与ClassB对话,原因是我们试图避免任何类型的依赖,假设ClassB是一个WPF框架,我们将尽量避免依赖它,以防有一天你决定切换到不同的框架