Сначала , чтобы модульный тест набрал assert
(или ASSERT
или _ASSERT
или _ASSERTE
в сборках Windows), модульному тесту потребуется запустить код подтест с отладочной сборкой.
Полагаю, это легко может произойти на компьютере разработчика.Для наших ночных сборок мы запускаем только модульные тесты в конфигурации выпуска, поэтому здесь нет никаких опасений по поводу утверждений.
Секунда , можно использовать нормативный подход с утверждениями -
Утверждения предназначены для обеспечения того, чтобы определенные условия / инварианты всегда были действительными в течение всего жизненного цикла программы.Или, если быть более точным, чтобы гарантировать, что если такое условие будет нарушено, мы узнаем об этом как можно скорее, как можно ближе к основной причине проблемы.
В этом случае нетмодульный тест должен выдвинуть утверждение, потому что вызов кода таким способом, которым выдано утверждение, не должен быть возможным.
или можно использовать «прагматический» подход с утверждениями:
Позвольте разработчикам разбросать ASSERT повсюду для сценариев "не делай этого" и "не реализовано".(И мы можем весь день спорить о том, что это неправильно ™ или правильно ™, но это не приведет к предоставлению функций.)
Если вы выберете прагматичный подход, то применение модульного теста к утверждению означает модульное тестирование.вызывается код, который не вполне поддерживается кодом.Это может означать, что код «ничего не делает» в сборке релиза, или это может означать, что код падает в сборке релиза, или это может означать, что код делает «что-то интересное».
Вот варианты, которыеМне известно, что я использую:
- Если утверждение сопровождается дополнительной проверкой, чтобы сделать вызов "безвредным", сделайте модульный тест тест для утверждения (в отладке) и для «безвредного» условия в выпуске.
- Для сбоев или «чего-то интересного», либо нет никакого модульного теста, который имеет смысл, или вы можете сделать «только для отладки» модульный тест, который проверяет, что вы действительнополучить утверждение (хотя я не уверен, что это полезно).