簡體   English   中英

WPF和MVVM-單元測試和彈出消息框或對話框

[英]WPF & MVVM - unit testing and pop-up Message Boxes or Dialogs

到目前為止,我正在MVVM中編寫應用程序。 但是我正在ViewModel中進行工作,這引發了一個錯誤,我想向用戶展示以告知他們。

可以在ViewModel(VM)中執行以下操作:

MessageBox.Show(errorMessage);

或更可能是這樣的:

new ErrorMessageWindow(errorMessage).ShowDialog()

所以我可以樣式。

然后的問題是我正在從VM創建UI彈出窗口。 我正在為該應用程序創建單元測試,該應用程序還會彈出窗口並停止運行,直到手動將其關閉。

尋找一個好的方法。

我當時正在考慮在VM中引發一個事件-但由於View確實不了解VM或其屬性,因此我不知道如何訂閱它。

我沒有使用任何外部框架-我寧願自己實現任何東西。

我通常為viewmodel提供了一種信號,指示它需要引發錯誤。 您可以通過依賴項注入,將其傳遞給構造函數等來實現。實現由包含的應用程序或綁定視圖提供。

測試時,您將傳遞“顯示錯誤消息”功能的測試實現,該功能僅驗證它是否被調用以及是否請求了正確的錯誤消息。 理想情況下,將視圖模型限制為將資源名稱和參數數組傳遞給格式字符串,以便它也可以與國際化一起使用。

您應該反對抽象,以便可以在單元測試期間調換實現。

例如,您可能有一個帶有ShowDialog方法的IWindowManager接口,然后有一個調用MessageBox實現(或在生產過程中需要的任何技術),然后可以使用隔離框架或為返回結果的單元測試創​​建測試實現。您想要作為測試中的控制變量。

您確實應該考慮使用MVVM框架 ,並且類似Caliburn.Micro之類的東西已經具有IWindowManager接口。

我建議您遠離傳統的Win32 dialogs 如果有的話,最好在WPF中完成對話框,並使用綁定到布爾值的對話框(例如可見性)將其從ViewModel中提出。 這很容易測試,因為您甚至不需要創建Window Manager的模擬類。

如何在WPF使自己彈出的對話框一個簡單的例子,請點擊這里

您還可以在此處使用對話框服務找到替代實現以幫助您從ViewModel中移動對話框的創建。 這使您可以在單元測試期間模擬對話框服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM