как избежать повторной реализации тестируемого кода при написании тестов? - PullRequest
1 голос
/ 27 ноября 2011

(я использую rspec в RoR, но я считаю, что этот вопрос актуален для любой системы тестирования.)

Я часто обнаруживаю, что делаю такие вещи в моем наборе тестов:

actual_value = object_being_tested.tested_method(args)
expected_value = compute_expected_value(args)
assert(actual_value == expected_value, ...)

Проблема в том, что моя реализация compute_expected_value() часто заканчивается имитацией object_being_tested.tested_method(), так что это действительно не очень хороший тест, потому что они могут иметь идентичные ошибки.

Это довольно открытый вопрос, но какие методы люди используют, чтобы избежать этой ловушки?(Баллы начисляются за ссылки на хорошие трактаты по теме ...)

Ответы [ 3 ]

3 голосов
/ 27 ноября 2011

Обычно (для написанных вручную модульных тестов) вы не вычисляете ожидаемое значение. Скорее, вы просто утверждаете против того, что вы ожидаете получить в результате проверенного метода для данных аргументов. То есть у вас будет что-то вроде этого:

actual_value = object_being_tested.tested_method(args)
expected_value = what_you_expect_to_be_the_result
assert(actual_value == expected_value, ...)

В других сценариях тестирования, где аргументы (или даже выполняемые методы тестирования) генерируются автоматически, вам необходимо разработать простой оракул, который даст вам ожидаемый результат (или инвариант, который должен сохраняться для ожидаемого результата). Такие инструменты, как Pex , Randoop , ASTGen и UDITA , позволяют проводить такое тестирование.

1 голос
/ 27 ноября 2011

Ну вот мои два цента

а) если расчет ожидаемого значения прост и не включает в себя никаких бизнес-правил / условий, кроме тестового примера, для которого он генерирует ожидаемый результат, то он должен быть достаточно хорошим ... запомните ваш фактический код будет настолько общим, насколько это возможно. Ну, есть случаи, когда вы столкнетесь с проблемами в ожидаемом методе, но вы можете легко определить причину сбоя и исправить ее.

b) существуют случаи, когда ожидаемое значение не может быть легко вычислено, в этом случае, вероятно, имеются плоские файлы с результатами или, возможно, какое-то постоянное ожидаемое значение, как, естественно, вы этого хотели бы.

Кроме того, существуют тесты, в которых вы просто хотите проверить, был ли вызван определенный метод или нет, и вы закончили тестирование этого модуля.

0 голосов
/ 27 ноября 2011

вы бы этого не делали.

Вы не вычисляете ожидаемое значение, вы уже знаете это. это должно быть постоянное значение, определенное в вашем тесте. (или построен из других функций, которые уже были протестированы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...