Если мой код содержит известный дефект, который должен быть исправлен, но еще не исправлен, и не будет исправлен в текущем выпуске, и, возможно, не будет исправлен в обозримом будущем, в случае неудачного модульного теста для этой ошибки в тестовый набор? Если я добавлю модульное тестирование, оно (очевидно) не будет выполнено, и привыкнуть к неудачным тестам кажется плохой идеей. С другой стороны, если это известный дефект, и есть известный сбойный случай, кажется странным не допускать его в набор тестов, так как в какой-то момент он должен быть исправлен, и тест уже доступен.
unit-testing
tdd
Мартейн
источник
источник
Ответы:
Ответ - да, вы должны написать их, и вы должны запустить их.
Ваша среда тестирования нуждается в категории «известных неудачных тестов», и вы должны пометить эти тесты как попадающие в эту категорию. Как вы это сделаете, зависит от структуры.
Любопытно, что неожиданно пройденный тест может быть таким же интересным, как и проходной тест, который неожиданно не проходит.
источник
Я думаю, что у вас должен быть модульный тест с текущим поведением и в комментариях, добавить правильный тест и правильное поведение. Пример:
Таким образом, когда исправление доступно, сборка завершится неудачно, и вы заметите, что вы провалили тест. Когда вы посмотрите на тест, вы узнаете, что изменили поведение, и тест должен быть обновлен.
РЕДАКТИРОВАТЬ: Как сказал капитан Мэн, в больших проектах это не будет исправлено в ближайшее время, но ради документации, оригинальный ответ лучше, чем ничего.
Лучший способ сделать это - продублировать текущий тест, заставив клона подтвердить правильность, и
@Ignore
это с помощью сообщения, напримерЭто связано с тем, что в вашей команде принято сокращать количество
@Ignore
d-тестов. Точно так же, как если бы вы вводили или изменяли тест для отражения ошибки, за исключением того, что вы не провалите сборку, если это критично для вашей команды, как, например, OP заявил, что исправление не будет включено в текущий выпуск ,источник
@Ignore
подход. Причина, по которой использование только комментария не кажется мне хорошей идеей, заключается в том, что я не думаю, что люди часто открывают модульные тесты, чтобы проверить их (если они не дают ошибок, или (надеюсь), когда они задаются вопросом, почему что-то игнорируется ).@Ignore
подход. Причина, по которой использование только комментария не кажется мне хорошей идеей, заключается в том, что я не думаю, что люди часто открывают модульные тесты, чтобы проверить их (если они не дают ошибок, или (надеюсь), когда они задаются вопросом, почему что-то пропускается ).В зависимости от инструмента тестирования вы можете использовать
omit
илиpend
.Пример в рубине:
Команда
omit
пропускает тест,omit_if
объединяет его с тестом - в моем примере я тестирую номер версии и выполняю тест только для версий, в которых, как я ожидаю, ошибка устранена.Вывод моего примера:
Итак, мой ответ: Да, провести тест. Но не путайте тестер с ошибками, когда вы знаете, что он потерпит неудачу.
источник
Если у вас свежая ошибка, и у вас есть время написать модульный тест сейчас, я бы написал ее сейчас и пометил как известную ошибку, чтобы она не провалилась при сборке. Ваш трекер ошибок должен быть обновлен, чтобы отразить, что существует модульный тест, который в настоящее время не проходит для этой ошибки, чтобы человек, назначенный для ее исправления, не переписывал ее заново. Это предполагает, что глючный код не требует большого количества рефакторинга и что API значительно меняется - если это так, то вам лучше не писать модульный тест, пока у вас нет лучшего представления о том, как тест должен быть написан ,
источник
Ответ НЕТ ИМХО. Не следует добавлять модульный тест для ошибки до тех пор, пока вы не начнете работать над исправлением ошибки, после чего вы напишете тест (ы), который подтверждает ошибку, и когда этот тест (тесты) не проходит в соответствии с отчетом об ошибке ( s) вы пойдете и исправите фактический код, чтобы выполнить тест (ы), и ошибка будет решена, и она будет устранена после этого.
В моем мире у нас был бы ручной тестовый случай, в котором QE терпели неудачу, пока ошибка не будет исправлена. И мы, как разработчики, узнаем об этом через руководство по сбою TC и через трекер ошибок.
Причина не добавления неисправных UT проста. UT предназначены для прямой обратной связи и проверки того, над чем я, как разработчик, сейчас работаю. И UT используются в системе CI, чтобы убедиться, что я не случайно что-то сломал в какой-то другой области кода для этого модуля. ИМХО, если намеренно проваливать UT на преднамеренную ошибку, было бы контрпродуктивно и просто неправильно.
источник
Я полагаю, что ответ на самом деле, это зависит. Будьте прагматичны в этом. Что вы пишете сейчас? Может быть, это свежо в вашем уме?
Исправляя ошибку, имеет смысл доказать, что она существует, написав модульный тест, который обнаруживает ошибку. Затем вы исправляете ошибку, и юнит-тест должен пройти.
У вас есть время, чтобы написать провальный модульный тест только сейчас? Есть ли более актуальные функции или ошибка, которую нужно написать / исправить.
Предполагая, что у вас есть компетентное программное обеспечение для отслеживания ошибок с зарегистрированной в нем ошибкой, на самом деле нет необходимости писать провальный модульный тест прямо сейчас .
Возможно, вы можете ввести в заблуждение, если введете неуспешный модульный тест перед выпуском, который происходит без исправления ошибки.
источник
Я обычно чувствую себя неловко из-за известных сбоев в наборах тестов, потому что слишком легко увеличивать список со временем или несвязанные сбои в тех же тестах, которые можно отклонить как «ожидаемые». То же самое касается случайных сбоев - в коде может быть что-то злое. Я бы проголосовал за написание теста для кода, как он есть сейчас, и как это должно быть, как только он будет исправлен, но закомментирован или отключен каким-то образом.
источник