2016-11-16 27 views
0

我正在爲使用MVVM Light的Messenger的WPF應用程序編寫一些單元測試。我們有幾種方法,看起來類似於這樣:需要幫助編寫使用MVVM Light的Messenger的單元測試

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

我想,我必須寫單元測試,其工作對副作用,運行是void類型的方法做,像這種情況下,將消息分配給Messenger對象的屬性。我該如何爲這種情況進行單元測試?

+1

你應該充滿信心如果你正在使用圖書館,'Messenger'運行良好。在UT中,你只是測試最小的單位,沒有消息,是不夠的? –

+0

我明白你的意思@雷洋。我正在尋找增加代碼覆蓋率。 – Rod

+0

那麼你是否也會介紹WPF綁定系統,你怎麼能相信你的視圖模型改變了,界面會改變? –

回答

0

爲了編寫mvvm燈的單元測試,您需要先註冊消息並知道何時發送消息 假設您的視圖模型中有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的,這將充當調解人類,它是一種信使

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

然後創建一個ClassB的

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

} 

的這裏指出的是,所有這些都阻止ClassA直接與ClassB交談,原因是我們試圖避免任何類型的依賴關係,假設classB是一個WPF框架,我們將盡力避免依賴於這種情況o你一天決定切換到不同的框架