У меня есть несколько спорная позиция по этому вопросу.Хотя в рабочем коде следует избегать дублирования кода, это не так уж плохо для тестового кода.Производственный и тестовый код различаются по своему характеру и назначению :
Производственный код может предоставить некоторую сложность, чтобы быть понятным / поддерживаемым.Вы хотите, чтобы код был на правильном уровне абстракции, а дизайн был согласованным.Это нормально, потому что у вас есть тесты и вы можете убедиться, что он работает.Дублирование кода в рабочем коде не было бы проблемой, если бы у вас действительно было 100% покрытие кода на логическом уровне.Этого действительно трудно достичь, поэтому правило таково: избегайте дублирования и максимизируйте охват кода.
С другой стороны, тестовый код должен быть максимально простым.Вы должны убедиться, что тестовый код действительно проверяет, что он должен.Если тесты сложные, вы можете столкнуться с ошибкой в тестах или неправильными тестами - и у вас нет тестов для тестов, поэтому правило таково: держите это простым.Если тестовый код дублируется, это не такая большая проблема, когда что-то меняется.Если изменение применяется только в одном тесте, в другом произойдет сбой, пока вы его не исправите.
Главное, что я хочу подчеркнуть, - это то, что рабочий и тестовый коды имеют различную природу.Тогда это всегда вопрос здравого смысла, и я не говорю, что вы не должны анализировать тестовый код и т. Д. Если вы можете что-то учитывать в тестовом коде и уверены, что все в порядке, то сделайте это.Но для тестового кода я бы предпочел простоту, а не элегантность, а для производственного кода я бы предпочел элегантность, а не простоту.Оптимально, конечно, иметь простое, элегантное решение:)
PS: Если вы действительно не согласны, пожалуйста, оставьте комментарий.