Несколько утверждений при модульном тестировании конструктора? - PullRequest
4 голосов
/ 10 апреля 2009

Я пытаюсь провести модульное тестирование класса с двумя конструкторами. Каждый конструктор имеет несколько параметров, которые устанавливают общедоступные свойства. У меня вопрос, должен ли я иметь только 2 модульных теста с несколькими утверждениями, чтобы проверить, было ли установлено каждое свойство ИЛИ тест для каждого параметра для каждого конструктора?

Public Person(string name, string phone, string birthday)
{
   name = name;
   phone = phone;
   birthday = birthday;
}

Public Person(string name) : this(name, null, null)
{}

Ответы [ 4 ]

12 голосов
/ 10 апреля 2009

Я никогда не был поклонником догмы "только одно утверждение за тест". Это просто не кажется мне практичным - вы в конечном итоге получаете много пухов (тестовых объявлений) вокруг того, что вас на самом деле интересует.

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

Я не говорю, что вы должны тестировать огромное количество функциональных возможностей в каждом тесте, но переход к другой крайности также не прагматичен.

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

8 голосов
/ 10 апреля 2009

Тестируемая операция заключается в том, что конструктор принимает __ параметры и что значения установлены на правильное значение.

Поэтому я бы сказал 1 тест на конструктор, с несколькими утверждениями на каждом, чтобы убедиться, что все члены установлены правильно.

6 голосов
/ 10 апреля 2009

Возможно, вам будет интересно узнать, что сказал сам Кент Бек прямо здесь, на переполнении стека. Он сказал ...

Мне платят за код, который работает, а не для тестов, поэтому моя философия заключается в тестировании как можно меньше, чтобы достичь данного уровень доверия (я подозреваю, что это уровень доверия высокий по сравнению отраслевым стандартам, но это может просто будь гордыней). Если я обычно не сделать вид ошибки (например, установка неправильные переменные в конструкторе), Я не проверяю это. Я склонен делать чувство ошибки теста, так что я лишний осторожен, когда у меня есть логика с сложные условия. При кодировании в команде я изменяю свою стратегию тщательно протестируйте код, который мы, все вместе, как правило, ошибаются.

Вот ссылка.

У меня нет проблем с признанием, что заставило меня переосмыслить некоторые вещи, которые я делал. И к лучшему.

0 голосов
/ 10 апреля 2009

Я рекомендую не иметь один тест для каждого свойства, а один тест с несколькими утверждениями для каждого конструктора.

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

...