Domanda

Quali modi può l'SampleConfirmationDialog unità da testare? Il SampleConfirmationDialog verrebbe esercitato attraverso test di accettazione, ma come potremmo test di unità che, visto che MessageBox non è astratta e senza interfaccia corrispondenza?

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;
    }
}
È stato utile?

Soluzione

Non puoi, è verificabile nel suo stato attuale. Per questa particolare classe, c'è anche alcun valore in unità di testarlo ... non è che un wrapper luce intorno a un built-in funzione di quadro, quindi tutto quello che faresti sta testando il quadro.

Se si deve assolutamente provarlo, l'interfaccia IConfirmationDialog dovrebbe avere un altro dipendenza che si può deridere nella unit test.

Altri suggerimenti

Si dovrebbe guardare in Typemock, un quadro di scherno commerciale che consente di unit test questo tipo di situazioni, utilizzando le prestazioni .NET profilatura librerie. Vedere loro sito per ulteriori informazioni.

Penso che sia OK per interrompere le prove che a quel livello. La vostra interazione con IConfirmationDialog è più importante verificare che MessageBox.Show è in realtà sempre chiamato. Dal momento che è un'interfaccia ed è facilmente mockable, penso che si sta abbastanza bene coperti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top