Должны ли модульные тесты охватывать изменение констант?

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

И теперь у меня есть возможность изменить эти константы для модульного теста. Я просто добавлю несколько функций с возвратом этого постоянного диапазона и имитацию этих функций. Но я должен сделать это.

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

Другими словами, должен ли модульный тест охватывать значение констант?


person Vladimir Vechkanov    schedule 19.12.2018    source источник


Ответы (2)


Конечно, вы могли бы провести это тестирование прямо сейчас, но я рекомендую следовать принципу YAGNI: не проверяйте это сейчас, вы никогда не сможете внести изменения. Однако, как только вы превратите эти константы в переменные, вам придется расширить набор тестов. Скорее всего, ваш тестовый набор в любом случае будет нуждаться в обслуживании, но чтобы быть уверенным, что вы не забудете об этом, добавьте комментарий к константам или используйте другую форму напоминания...

person Dirk Herrmann    schedule 28.01.2019

Фактический ответ будет зависеть от реализации и мнения и зависит от множества факторов.

Однако общее правило, которое я использую, таково: если это истинный «параметр» (изменяющееся значение, а не постоянное), его следует рассматривать и тестировать как таковой. Ака передает значение в качестве аргумента конструктора или метода. Не нужно издеваться в этом случае.

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

Вам решать, следует ли рассматривать эту «константу» как таковую или как параметр.

person Russell Cullen    schedule 19.12.2018