В TDD, сколько тестов я должен написать для метода? - PullRequest
3 голосов
/ 03 мая 2011

Я хочу реализовать метод, который сообщает мне, если координаты (x и y) выходят за пределы.Сколько тестов я должен написать?Мне кажется, что это 5:

  1. Тест на отрицательный х через границу
  2. Тест на положительный х через границу
  3. Тест на отрицательный у через границу
  4. Проверка положительного значения y по границам
  5. Проверка по границам

Создаю ли я избыточные тесты, и мне нужно иметь только 1 тест для каждого метода, который я хочу реализовать?*

Ответы [ 5 ]

8 голосов
/ 03 мая 2011

Обычно мы не думаем об этом в TDD.Это больше: «какой тест мне нужен дальше?»Поэтому, как правило, я начинаю с (псевдокод)

given: bounds (5, 10, 15, 20)
assert: outOfBounds(0, 0)

и делаю это с

outOfBounds(x, y): return true

Но я знаю, что это еще не реально, поэтому я знаю, что мне нужен еще один тест.

assert: !outOfBounds(5, 10)

Так что теперь не получается.Что самое простое, что могло бы сработать?Может быть

outOfBounds(x, y): return x == 0

Конечно, я знаю, что все еще притворяюсь, поэтому мне нужно еще один тест.Это продолжается, пока я больше не притворяюсь.Возможно, в этом случае я бы столкнулся с теми же пятью случаями, что и вы, с вашим вопросом «сколько тестов» - но, возможно, я пойму, что закончил чуть раньше.

Aлучший вопрос: Нужен ли мне еще один тест?

4 голосов
/ 03 мая 2011

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

Действительно, если вы практикуете TDD (как следует из названия), тогдаповедение вашего метода должно зависеть от написанных вами тестов, а не наоборот - так что вы уже нашли оптимальное количество тестов для написанной вами функциональности, чтобы они прошли.(Хотя принято думать о крайних случаях и случаях сбоя после исключения функциональности happy-path, я думаю, что здесь произошло?)

Для этого конкретного случая пять тестов, которые вы описали здесьзвучит совершенно разумно для меня.

1 голос
/ 03 мая 2011

Предыдущий работодатель нанял Кента Бека для проведения двухдневного семинара по TDD для нашей группы. И я спросил его что-то очень похожее, что-то вроде: «Как узнать, достаточно ли у вас тестов?» Его ответ был «Вы чувствуете, что у вас достаточно тестов?» Конечно, он не спрашивал: «Вы чувствуете, что проделали достаточно работы на сегодня?» или «Вы бы предпочли ловить рыбу, и если так, прекратите писать тесты». Суть его заключалась в том, что, когда вы думаете, что исчерпали все способы, которыми ваше устройство может быть протестировано и показано, что он работает (или не работает) правильно, тогда все готово.

И, конечно, когда вы обнаружите ошибку в этом отряде, вы понимаете: «Может быть, я еще не закончил». Затем вы добавляете больше тестов, а затем исправляете свою ошибку.

0 голосов
/ 20 февраля 2014

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

0 голосов
/ 03 мая 2011

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

В этом случае вы должны проверить все необходимые вам границы.

Итак, 1 тестовый «метод», которыйпроверяет 5 границ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...