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