Рассмотрим следующий код (из условия, что говорит, что 3 является особенным по некоторым причинам):Модульное тестирование конкретных значений
bool IsSpecial(int value)
if (value == 3)
return true
else
return false
Я бы модульное тестирование это с парой функций - одна называется TEST (3IsSpecial) который утверждает, что при передаче 3 функция возвращает true и другую, которая передает некоторое случайное значение, отличное от 3, и утверждает, что функция возвращает false.
Когда требование меняется и говорит, что теперь оно становится 3 и 20 являются специальными, я бы написал еще один тест, который проверяет, что при вызове с 20 эта функция также возвращает true. Этот тест потерпит неудачу, и тогда я перейду и обновить условие if в функции.
Теперь, если в моей команде есть люди, которые не верят в модульное тестирование, и они вносят это изменение. Они будут напрямую перемещаться и изменять код, так как мой второй единичный тест может не тестироваться на 20 (это может быть случайный выбор int или какой-то другой int hardcoded). Теперь мои тесты не синхронизируются с кодом. Как я могу убедиться, что при изменении кода какой-либо модульный тест или другой сбой?
Я мог бы сделать что-то очень плохое, поэтому любые другие методы, чтобы обойти это, также приветствуются.
Если я нахожусь на C++, тогда нет возможности делать перечисления SpecialValues и проверять SpecialValues.has (3) или SpecialValues.has (20). Это становится проблемой, не так ли? – obelix
Я не уверен в этом, но вы можете перебирать значения в C++. Если да, то вы можете реализовать функции внутри своего IsSpecial. –