Недавно у меня была интересная дискуссия с коллегой об модульных тестах. Мы обсуждали, когда тестирование единиц тестирования стало менее продуктивным, когда ваши контракты меняются.
Возможно, кто-нибудь может рассказать мне, как подойти к этой проблеме. Позвольте мне уточнить:
Итак, давайте скажем, что есть класс, который выполняет некоторые отличные вычисления. В контракте говорится, что он должен вычислить число или он возвращает -1, когда по какой-то причине он не работает.
У меня есть контрактные тесты, которые проверяют это. И во всех моих других тестах я заглушу этот отличный калькулятор.
Итак, теперь я меняю контракт, всякий раз, когда он не может вычислить, он будет вызывать исключение CannotCalculateException.
Мои тесты контрактов не пройдут, и я их исправлю. Но все мои обманутые объекты будут по-прежнему использовать старые правила контракта. Эти тесты будут успешными, в то время как они не должны!
Вопрос, который поднимается, заключается в том, что с этой верой в модульное тестирование, насколько вера может быть помещена в такие изменения... Модульные тесты успешны, но при тестировании приложения будут возникать ошибки. Тесты с использованием этого калькулятора должны быть исправлены, что требует времени и даже может быть много раз заострено/издеваться...
Как вы думаете об этом случае? Я никогда не думал об этом. По-моему, эти изменения в модульных тестах были бы приемлемыми. Если я не буду использовать модульные тесты, я бы также заметил, что такие ошибки возникают на этапе тестирования (тестировщиками). Однако я недостаточно уверен, чтобы указать, что будет стоить больше времени (или меньше).
Любые мысли?