Модульное тестирование: жесткая зависимость MessageBox.Show () - PullRequest
2 голосов
/ 21 мая 2010

Какими способами SampleConfirmationDialog можно тестировать модулем? SampleConfirmationDialog будет выполняться с помощью приемочных тестов, однако как мы можем выполнить его модульное тестирование, поскольку MessageBox не является абстрактным и не соответствует интерфейсу?

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;
    }
}

Ответы [ 3 ]

5 голосов
/ 21 мая 2010

Вы не можете, это невозможно проверить в текущем состоянии. Для этого конкретного класса также нет смысла в его модульном тестировании ... это всего лишь легкая оболочка вокруг встроенной функции фреймворка, поэтому все, что вам нужно сделать, это протестировать фреймворк.

Если вам абсолютно необходимо его протестировать, интерфейс IConfirmationDialog должен иметь еще одну зависимость, которую вы можете смоделировать в модульном тесте.

0 голосов
/ 21 мая 2010

Я думаю, что можно прекратить тестирование на этом уровне. Ваше взаимодействие с IConfirmationDialog важнее, чем проверка того, что MessageBox.Show действительно вызывается. Так как это интерфейс, и его легко смоделировать, я думаю, вы достаточно хорошо охвачены.

0 голосов
/ 21 мая 2010

Вы должны взглянуть на Typemock, коммерческий фреймворк, позволяющий вам тестировать подобные ситуации модульными библиотеками .NET. См. их веб-сайт для получения дополнительной информации.

...