2011-10-05 29 views

回答

2

理想的情況下,消息框被設置爲一個依賴,以便它可以被嘲笑/存根/單元測試過程中僞造的,是這樣的:

public interface IMessageBox 
{ 
    Show(...); 
} 

當然,你將需要實現的接口在你的MessageBox包裝類中。更多關於DI的信息:http://en.wikipedia.org/wiki/Dependency_injection

如果現在不可能用這種方法重新設計您的應用程序,您可以嘗試this approach

+0

+1,但是請不要走Windows鉤子方法。如果你有遺留代碼,你不能重構,但想測試,看看Typemock。 – TrueWill

0

理想情況下,您的測試將測試您的業務邏輯。我通常將MessageBox視爲UI組件而不是UI。這需要修改程序流程,以便錯誤/例外/驗證獨立於用戶通知發生。 IE依靠IDataErrorInfo而不是屬性集上的異常。

如果你無法避免它,並且不想走包裝消息框和使用模擬DI的路線,我已經使用了在我的應用程序中設置一個Public Shared Property RunSilent As Boolean = False單例變量的技術,以指示應用程序應該運行沉默,然後在調用該消息框之前檢查該屬性,以便僅在未運行沉默時才顯示該框。然後在我的單元測試設置中,將silent標誌設置爲true。不理想,但有效。