2009-02-24 1 views
1

Я пытаюсь понять, что лучше всего подходит для управления старым модульным тестом, который на самом деле не соответствует или работает больше из-за причин, таких как ошибки или логические изменения в вашем коде? Мы просто пропустим их все и изменим их в соответствии с текущей логикой?Какова наилучшая практика для управления старым модульным тестом при отладке или добавлении новой функции?

Например, если эти тесты не были написаны вами, и теперь вы отвечаете за изменение кода. У вас все еще есть время, чтобы обновить эти тесты, чтобы они прошли, прежде чем двигаться дальше?

Или просто пропустите их? Спасибо.

ответ

3

Изделие, устаревшее, бесполезно. Если вы хотите, чтобы они были полезны, обновите их.

2

Конечно, вы должны потратить время, чтобы пройти. Зачем бросать эту работу?

Вся идея TDD заключается в том, чтобы все тесты проходили все время. С того момента, как вы начинаете говорить: «Эй, все нормально, что этот модульный тест терпит неудачу», TDD бесполезен. Это требует некоторой дисциплины, да, но это того стоит в конце.

1

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

Я бы обновил тесты.

Но сначала я бы выследил разработчика, который сломал их и ... хорошо here's some inspiration.

1

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

0

Есть два возможных ситуаций:

  1. Небольшое количество тестов неудовлетворительно - фиксирующих тесты
  2. Большой части теста терпеть неудачу, и это займет больше времени, чтобы исправить все тесты, то для реализации изменение - отбросить весь тестовый проект и написать новые тесты.
0

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

С течением времени испытания устаревают, особенно со зрелыми продуктами. В лучшем случае они служат для простого использования кода. Иногда они терпят неудачу, но обычно по причинам, не связанным с тем, почему они были написаны в первую очередь. Вы должны использовать свое мнение относительно того, отказаться от устаревшего теста или нет. У нас есть 10 000 секунд тестов, если мы не изредка отрубаем мертвую древесину, тесты пройдут слишком долго, чтобы закончить.

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

2

Когда тест не пройден, есть три варианта:

  1. Код производства сломан, и она должна быть исправлена.
  2. Тест не работает (или не обновляется с последними изменениями производственного кода), и тест должен быть исправлен.
  3. Поведение, указанное в тесте, больше не требуется, и тест можно удалить.

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

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