ВопросДолжны ли модульные тесты терпеть неудачу только в случае нарушения вашего приложения?
Вы когда-либо внесли изменения в приложение и все работает просто отлично, но когда вы идете, чтобы запустить блок тестирует весь ад потерять? Это моя конкретная проблема. Было бы справедливым сказать, что это не хорошие тесты, так как они терпят неудачу, когда мое приложение работает нормально? И «работая», я имею в виду, что он проходит все приемочные испытания, и каждая функция работает по назначению.
фон
Большую часть времени после того, как я внес изменения в моем приложении я могу запустить через все особенности без проблем, а затем, когда я бегу мои модульных тестов я буду иметь сбои. Таким образом, есть случаи, когда я трачу много времени на обновление единичных тестов, которые не удались для отлично работающего приложения. Моя кишка говорит мне, что , если ваши тесты терпят неудачу, когда приложение проходит, то это бесполезные тесты, и все, что они делают, предупреждает разработчика об изменениях в реализации, которые они только что сделали. Это неправильно? Могут ли хорошие тесты терпеть неудачу, если ничего другого в рассматриваемом приложении не удалось?
Пример сценарий
Вы юнит-тесты, которые проверяют определенное имя файла возвращаются, такими как fileName.txt
. Всюду в вашем коде этот файл ссылается на константу IMPORTANT_FILENAME
, поэтому изменение имени файла не влияет на ваше приложение. Вы решили изменить имя файла с «fileName.txt» на «NewFileName.txt». Ваше приложение работает нормально, как и должно быть, но ваш модульный тест на verify(fileName,'fileName.txt')
терпит неудачу. Это грубый пример, но я надеюсь, что вы поняли. Дело здесь в том, что когда я нахожу, что обновляю модульные тесты в рабочем приложении, мне кажется, что это красный флаг, который является плохим тестом. Я не могу придумать какой-либо тест, который не подходит для проходящего приложения, которое является хорошим. Но прежде чем использовать это как правило и начать удаление, я хотел бы получить некоторую обратную связь. Вы согласны; модульные тесты не должны терпеть неудачу в проходящем приложении?
Боковое примечание: Я не думаю, что это имеет значение, но я использую Java, Junit и Mockito.
Это зависит от контекста. Почему ваше приложение не работает при сбое компонента? –
Да и да. В модульных тестах утверждается, что API «единицы» (например, класс) работает как указано или рекламируется. Приложение не может (на данный момент) использовать API в полной мере, или ваши системные тестовые примеры могут пропустить некоторую комбинацию, что является довольно распространенной ситуацией. – laune
Я добавлю несколько примеров –