什麼方法可以單元測試SampleConfirmationDialog? SampleConfirmationDialog將通過驗收測試來執行,但是我們如何單元測試它,因爲MessageBox不是抽象的,也沒有匹配的接口?單元測試:硬依賴MessageBox.Show()
public interface IConfirmationDialog
{
/// <summary>
/// Confirms the dialog with the user
/// </summary>
/// <returns>True if confirmed, false if not, null if cancelled</returns>
bool? Confirm();
}
/// <summary>
/// Implementation of a confirmation dialog
/// </summary>
public class SampleConfirmationDialog : IConfirmationDialog
{
/// <summary>
/// Confirms the dialog with the user
/// </summary>
/// <returns>True if confirmed, false if not, null if cancelled</returns>
public bool? Confirm()
{
return MessageBox.Show("do operation x?", "title", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes;
}
}
換句話說,您要測試'SampleConfirmationDialog',而不是'MessageBox'類。你可以抽象'IConfirmationProvider',其中一個實現可以使用'MessageBox',你可以測試'Confirm()'調用'IConfirmationProvider.GetConfirmation()',但是這對你並沒有什麼幫助 - 在某種程度上你會遇到那個無法測試的'MessageBox.' – Jay 2010-05-20 21:25:00
是的,謝謝。這一個一直在竊聽我。但你們都是對的。 – 2010-05-20 21:33:36