Я добавляю модульные тесты к некоторому унаследованному С++-коду, и я столкнулся со многими сценариями, где утверждение внутри функции будет сработано во время прогона unit test. Общая идиома, с которой я столкнулся, это функции, которые принимают аргументы указателя и сразу же утверждают, что аргумент равен NULL.
Я мог бы легко обойти это, отключив утверждения, когда я буду тестировать единицы. Но я начинаю сомневаться в том, что модульные тесты должны облегчить необходимость утверждений времени исполнения. Это правильная оценка? Являются ли модульные тесты предполагаемыми заменами утверждений времени выполнения, когда они происходят раньше в конвейере (т.е. Ошибка попадает в неудачный тест, а не когда программа работает).
С другой стороны, мне не нравится добавление мягкого кода в код (например, if (param == NULL) return false;
). Среда выполнения, по крайней мере, упрощает отладку проблемы в случае, если unit test пропустил ошибку.