Когда происходят значительные изменения кода (новый набор POJO, рефакторинг основных приложений и т. Д.), Модульные тесты, как правило, закомментированы, а не переработаны.
Я всегда стараюсь отделить рефакторинг и изменение функциональности. Когда мне нужно сделать то и другое, я обычно сначала выполняю рефакторинг.
При рефакторинге кода без изменения функциональности предполагается, что существующие модульные тесты помогут избежать случайного нарушения функциональности рефакторинга. Поэтому для такого коммита я бы считал отключение или удаление модульных тестов главным предупреждающим знаком. Любому разработчику, который делает это, следует запретить делать это при проверке кода.
Возможно, что изменения, которые не изменяют функциональность, по-прежнему приводят к сбою модульных тестов из-за некорректных модульных тестов. Если вы понимаете код, который вы меняете, то причина таких сбоев модульного теста обычно сразу очевидна и ее легко устранить.
Например, если функция принимает три аргумента, в модульном тесте, охватывающем взаимодействие между первыми двумя аргументами для функции, возможно, не удалось бы обеспечить допустимое значение для третьего аргумента. Этот недостаток в модульном тесте может быть обнаружен путем рефакторинга тестируемого кода, но его легко исправить, если вы понимаете, что код должен делать и что тестирует модульный тест.
При изменении существующей функциональности обычно также необходимо изменить некоторые юнит-тесты. В этом случае модульные тесты помогают гарантировать, что ваш код изменяет функциональность по назначению и не имеет непреднамеренных побочных эффектов.
При исправлении ошибок или добавлении новых функций обычно требуется добавить больше юнит-тестов. Для них может быть полезно сначала выполнить модульные тесты, а затем зафиксировать исправление ошибки или новую функциональность. Это облегчает проверку того, что новые модульные тесты не прошли с более старым кодом, но действительно с более новым кодом. Однако этот подход не лишен недостатков, поэтому существуют также аргументы в пользу одновременного выполнения как новых модульных тестов, так и обновлений кода.
Время лучше потратить на интеграционные тесты, охватывающие сценарии использования, которые делают тесты с меньшей областью действия менее важными.
В этом есть доля правды. Если вы можете охватить нижние уровни программного стека тестами, ориентированными на верхние уровни программного стека, ваши тесты могут оказаться более полезными при рефакторинге кода.
Я не думаю, что вы найдете согласие на точное различие между модульным тестом и интеграционным тестом. И я не буду беспокоиться, если у вас есть тестовый пример, который один разработчик называет модульным тестом, а другой - интеграционным тестом, если они могут согласиться с тем, что это полезный тестовый пример.