Тесты ценны. По крайней мере, они записывают, что кто-то считал, что им следует потратить время на их написание, поэтому, по-видимому, они когда-то имели какую-то ценность для кого-то. Если повезет, они будут содержать полную запись всех функций и ошибок, над которыми когда-либо работала команда, хотя они также могли быть способом попасть в произвольное число тестов, не будучи тщательно продуманным. Пока вы не посмотрите на них, вы не будете знать, что здесь происходит.
Если большая часть ваших тестов проходит большую часть времени, просто откусите пулю и потратьте время на выяснение того, что пытались выполнить несколько неудачных тестов, а также на исправление или улучшение их, чтобы в следующий раз работа была проще. В этом случае перейдите к разделу Определение цели для каждого раздела теста , чтобы получить советы о том, что делать с небольшим количеством неудачных тестов.
С другой стороны, вы можете столкнуться со сборкой Red и сотнями или даже тысячами тестов, которые не прошли некоторое время, и Дженкинс долгое время не был Green. На этом этапе статус сборки Jenkins стал бесполезным, и ключевой индикатор проблем с вашей регистрацией больше не работает. Вам нужно это исправить, но вы не можете позволить себе остановить весь прогресс, пока вы наводите порядок в своей гостиной.
Чтобы сохранить ваше здравомыслие, выполняя необходимую археологию, чтобы определить, какое значение можно восстановить из неудачных тестов, я рекомендую следующие шаги:
Временно отключите неудачные тесты.
Есть несколько способов сделать это, в зависимости от вашей среды, которые вы не можете четко описать, поэтому я не могу рекомендовать какой-либо конкретный способ.
Некоторые структуры поддерживают понятие ожидаемых отказов. Если у вас есть, то это здорово, так как вы увидите обратный отсчет того, сколько тестов осталось в этой категории, и вам даже сообщат, если некоторые из них начнут проходить неожиданно.
Некоторые фреймворки поддерживают группы тестов и позволяют сообщать Хадсону только о запуске некоторых тестов или пропуске группы тестов. Это означает, что вы можете иногда запускать тестовую группу вручную, чтобы увидеть, проходят ли какие-либо из них сейчас.
Некоторые фреймворки позволяют аннотировать или иным образом отмечать отдельные тесты, которые будут игнорироваться. В этом случае труднее управлять ими как группой, но это мешает им отвлекать вас.
Вы можете переместить тесты в исходное дерево, которое обычно не включено в сборку.
В крайнем случае, вы можете удалить код из HEAD системы контроля версий, но тогда вам будет сложнее распознать, когда третий этап завершен.
Цель состоит в том, чтобы Дженкинс как можно скорее стал Зеленым, чтобы вы могли начать движение в правильном направлении как можно скорее.
Держите тесты актуальными.
Разрешите добавлять новые тесты по мере добавления или изменения кода и обязуйтесь не сдавать все проходящие тесты.
Тесты могут проваливаться по разным причинам, включая тот факт, что они не были хорошо написанными тестами для начала. Но как только Дженкинс станет зеленым, это будет очень важно.
Привыкните к написанию хороших тестов и сделайте так, чтобы тесты начинали проваливаться.
Определите цель каждого теста.
Пройдите отключенные тесты один за другим. Начните с тех, которые влияют на модули, которые вы меняете чаще всего. Определите цель теста и причину неудачи.
Проверяет ли он функцию, которая была специально удалена из базы кода? Тогда вы, вероятно, можете удалить его.
Это ошибка, которую еще никто не заметил? Восстановите тест и исправьте ошибку.
Это сбой, потому что он делал необоснованные предположения (например, предполагая, что текст кнопки всегда будет на английском языке, но теперь вы локализовали свое приложение для нескольких языков)? Затем выясните, как сделать тест сосредоточенным на одной вещи, и изолировать его от несвязанных изменений как можно лучше.
Распространяется ли тест на все приложение и представляет собой системный тест? Затем удалите его из основного набора тестов Jenkins и добавьте его в набор регрессии, который запускается реже.
Изменилась ли архитектура приложения до неузнаваемости, поэтому тест больше не дает ничего полезного? Удали это.
Был ли тест добавлен для искусственного увеличения статистики покрытия кода, но на самом деле он не более чем подтверждает, что код компилируется правильно и не входит в бесконечный цикл? Или же, тест просто подтверждает, что выбранная вами насмешливая структура возвращает результаты, о которых вы только что сказали? Удали это.
В результате этого некоторые тесты будут выдержаны, некоторые будут изменены, некоторые разделены на несколько независимых кусков размера укуса, а некоторые удалены. Пока вы все еще прогрессируете с новыми требованиями, ответственное дело - выделить немного времени для решения технических проблем, подобных этому.