Модульное тестирование устаревшего кода с несколькими конструкторами, но без методов получения
Я пытаюсь выполнить модульное тестирование (в Java) кусок кода, который имеет несколько конструкторов и некоторые с логикой в них. Таким образом, помимо установки некоторых полей, конструкторы могут влиять на определенные статические объекты в зависимости от определенных условий. Мне было интересно, как можно провести их тестирование, учитывая, что код не предоставляет методов получения, а поля являются закрытыми. Я также не могу изменить исходный код. Один способ увидеть, повторять ли каждый тест, который я делаю для каждого конструктора, но, кажется, лучшее решение должно существовать. Я видел некоторые решения на этом сайте и другие для классов модульного тестирования с несколькими конструкторами, но я не нашел ничего, что точно соответствовало бы моей ситуации.
2 ответа
Цель модульного тестирования состоит в том, чтобы гарантировать, что объект ведет себя правильно для всех возможных входных данных и всегда находится в согласованном, ожидаемом состоянии. Это особенно ценно, поскольку разрабатываются классы и модули. Отсутствие добытчиков не должно иметь значения.
В вашем случае я рекомендую генерировать большое разнообразие комбинаций параметров для всех конструкторов (нормальные значения, сумасшедшие значения, нулевые значения, крайние случаи и т. Д.) И убедиться, что результирующий объект ведет себя так, как ожидалось. Поведение в соответствии с ожиданиями может означать правильную работу, изящный сбой или выдачу соответствующих исключений.
Конечно, у объектов есть некоторые методы помимо конструкторов, поэтому вы должны включить их в свои тесты. Если объекты имеют какие-либо побочные эффекты, вы можете проверить, что они произошли, как ожидалось.
Наконец, даже если вы не можете изменять код, возможно, вы можете расширить его, добавив несколько дополнительных методов, единственной целью которых было бы облегчить модульное тестирование. Если правило "без изменений" является простой политикой кодирования в вашей организации, то, безусловно, было бы неплохо добавить методы с целью улучшения качества.
С другой стороны, если вы действительно не можете изменить код, зачем вообще беспокоиться о модульном тестировании? Если вы не можете изменить код, вы не можете исправить ошибки, которые может выявить модульное тестирование.
Вся ваша работа, выполненная этими конструкторами, имеет какой-то эффект, верно? Так что проверь, как оно влияет. На эти статические объекты? Изучите те. О последующем поведении объекта? Проверьте это.