2009-04-09 3 views
4

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

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

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

ответ

8

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

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

12

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

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

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

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

+0

Я знаю, что вера «один утверждать за испытание» призвана уменьшить путаницу, но в этом случае я думаю, что меньше. –

+0

Мне кажется, что в этом случае 2 меньших теста или 1 более крупный тест приведут к тому же количеству строк. Поэтому я бы выбрал 2 меньших теста. –

+0

Я не думаю, что вопрос между двумя тестами или 1 - это между 2-мя тестами или 4. –

0

Во-вторых, рекомендация не иметь одного теста на каждое свойство, но один тест с несколькими утверждениями для каждого конструктора.

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

6

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

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

Here's the link.

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

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