Tests unitaires: MessageBox.Show de dépendance matérielle ()
-
04-10-2019 - |
Question
Quels sont les moyens peut être le SampleConfirmationDialog unité testée? Le SampleConfirmationDialog serait exercé par des tests d'acceptation, mais comment pourrait-on tester l'unité elle, car MessageBox n'est pas abstraite et pas d'interface correspondant?
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;
}
}
La solution
Vous ne pouvez pas, il est invérifiable dans l'état actuel de ce. il est pour cette classe particulière, il y a aussi pas de valeur dans l'unité de le tester ... mais une enveloppe de lumière autour d'une fonction intégrée de cadre, tout ce que vous feriez est de tester le cadre.
Si vous devez absolument tester, l'interface IConfirmationDialog devrait avoir une autre dépendance que vous pouvez railler dans le test unitaire.
Autres conseils
Vous devriez examiner Typemock, un cadre moqueur commercial qui permet de vous tester l'unité de ce genre de situations en utilisant les bibliothèques de profilage des performances .NET. Voir leur site pour plus d'informations.
Je pense qu'il est OK pour arrêter le tester à ce niveau. Votre interaction avec IConfirmationDialog
est plus important que de vérifier que MessageBox.Show
est en fait s'appeler. Puisque c'est une interface et est facilement mockable, je pense que vous êtes assez bien couvert.