2014-10-16 8 views
1

Я пытаюсь выполнить тестирование метода на C# с использованием MSTest. Я проверяю, что сложность пароля принудительно используется методом ChangePasswordAsync. Моя проблема заключается в том, что я хочу протестировать этот метод с рядом параметров. В настоящее время у меня есть единичный тест с несколькими утверждениями для тестирования разных параметров, это разумное решение?Модульное тестирование нескольких утверждений

Я знаю, что когда я использовал другие модульные модули тестирования, были способы тестирования метода с различными параметрами. Есть ли атрибут, который я могу использовать для метода для достижения этого? Мой примерный единичный тест приведен ниже:

/// <summary> 
    /// Ensures that a password must meet the password complexity of a digit and an alphanumeric, 8 digits long and one 
    /// special character. 
    /// </summary> 
    [TestMethod] 
    public void TestPasswordComplexity() 
    { 
     var result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "1!").Result; //Changes the password. 

     Assert.IsFalse(result.Succeeded); 

     result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "123456789").Result; //Changes the password. 

     Assert.IsFalse(result.Succeeded); 

     result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "123456789!").Result; //Changes the password. 

     Assert.IsFalse(result.Succeeded); 

     result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "abcdefghijk").Result; //Changes the password. 

     Assert.IsFalse(result.Succeeded); 

     result = _UserManager.ChangePasswordAsync(_TestUser.Id, "Password123!", "abcdefghijK1!").Result; //Changes the password. 

     Assert.IsTrue(result.Succeeded); 
    } 

Или, альтернативно, вы можете разбить каждый на отдельные модульные тесты?

+5

Имейте одно подтверждение на тест. Разделите их на разные тесты и назовите их соответственно. – NMK

+0

Несмотря на то, что существует несколько утверждений, это логически один тест - вы назвали его хорошо, и он делает то, что он говорит, - он проверяет сложность пароля. Разрыв этого в нескольких методах тестирования не добавляет ничего, кроме увеличения количества тестов, которые необходимо выполнить. –

+0

@TomRedfern это не правда, что вы говорите. Разрыв в отдельных тестах приведет к лучшему пониманию и лучшей ремонтопригодности, если, может быть, 3-й запрос не удастся. В приведенном выше сценарии только один тест будет терпеть неудачу, но если у вас есть одно утверждение за тест, то еще четыре теста будут по-прежнему действительны. Поэтому вам не нужно отлаживать, чтобы найти строку, которая приводит к сбою теста. – Dom84

ответ

1

Напишите для каждого испытания отдельный метод испытаний единицы измерения со значением полного имени. Итак, когда позже тест не проходит, вы легко узнаете, в чем проблема.

Вы должны различать различные тесты и различные параметры испытаний. Некоторые из ваших утверждений потерпят неудачу, потому что пароль по какой-то причине слабый, должен пройти .

Для случая, когда вам действительно нужны разные параметры, есть возможность использовать DataSource (см. http://msdn.microsoft.com/en-us/library/ms182527.aspx), где вы можете добавить внешний источник в качестве файла excel для ввода.

Например, вы можете протестировать проходящие пароли с помощью источника excel.

Смежные вопросы