Утверждает и хороший alwaysAssert()
функция. ИМХО, они более важны, чем модульные тесты, потому что модульные тесты могут находить ошибки только в тех конкретных случаях, которые вы хотели протестировать. Если один и тот же программист пишет код и тесты, он / она, вероятно, пропустит одни и те же крайние случаи в обоих. Кроме того, иногда модульное тестирование нецелесообразно, поскольку среда, в которой функционирует компонент, и / или данные, с которыми он работает, слишком сложна, чтобы придумать надуманный тестовый пример.
Прелесть утверждений заключается в их способности документировать предположения и проверять их на необдуманных данных . Если какое-либо из этих предположений неверно, ваш код громко дает сбой, вместо того, чтобы «работать», но выдает слегка неверные результаты. Он также не подходит ближе к корню проблемы, чем без утверждений. На практике, если вы явно сформулируете достаточно предположений о куске кода, и все эти предположения верны, то код обычно является правильным.
Одна из распространенных претензий к утверждениям заключается в том, что их можно отключить. ИМХО, у каждого языка или стандартной библиотеки должна быть alwaysAssert()
функция или грубый эквивалент, который делает то же самое, assert
но не может быть отключен. Это можно использовать для проверки предположений в не критичных к производительности областях кода, где преимущества отключения утверждений незначительны.