Да, это нормально. Это не проблема, что ваш тестовый код длиннее, чем производственный код.
Возможно, ваш тестовый код может быть короче, чем он есть, а может и нет, но в любом случае вы не хотите, чтобы тестовый код был «умным», и я бы сказал, что после первого написания вы не Я не хочу реорганизовать тестовый код, чтобы сделать что-то общее, за исключением случаев, когда это абсолютно необходимо. Например, если у вас есть регрессионный тест для прошлой ошибки, то, если вы не измените тестируемый публичный интерфейс, не трогайте этот тестовый код. Когда-либо. Если вы это сделаете, вам нужно будет только вытащить какую-то древнюю версию реализации, до исправления ошибки, чтобы доказать, что новый регрессионный тест все еще работает. Пустая трата времени. Если единственный раз, когда вы модифицируете свой код, это сделать его «проще в обслуживании», вы просто создаете занятую работу.
Обычно лучше добавлять новые тесты, чем заменять старые тесты новыми, даже если в итоге вы получите дублированные тесты. Вы рискуете ошибкой без пользы. Исключением является то, что если ваши тесты выполняются слишком долго, тогда вы хотите избежать дублирования, но даже это лучше всего сделать, разбив ваши тесты на «основные тесты» и «полные тесты», и запустив все старые возможно-дубликаты реже.
Также см. Соотношение тестового кода SQLite к рабочему коду