Модульное тестирование в C ++ - использование жестко закодированного или сгенерированного массива - PullRequest
0 голосов
/ 04 мая 2020

Допустим, я пишу с ++ драйвер для управления некоторым устройством на последовательной шине. Это упрощенная версия проблемы. У меня есть класс DeviceDriver, у которого есть std::vector<unsigned char> transmitFrames(int deviceNumber) метод. Возвращает два значащих байта, за которыми следует постоянное число нулевых значений. Шаблон:

transmitFrames(0) должен возвращать {0xFF, 0xFF}, transmitFrames(1) должен возвращать {0xFF, 0xFF, 0x00, 0x00}, transmitFrames(2) должен возвращать {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00} ...

При тестировании этот метод должен Я использую жестко закодированные ожидаемые массивы или я должен генерировать их где-нибудь? Жестко закодированную версию практически невозможно написать, потому что transmitFrames(100) вернет вектор многих значений. Сгенерированная версия будет в порядке, но как насчет алгоритма? Это будет так же, как в классе. Это нарушило бы правило DRY и, конечно, алгоритм тестирования все еще имел бы ошибку. Я использую каркас Googletest. Как бороться с такими проблемами, как длинные массивы в модульном тестировании?

...