С модульный тест С распространенная практика

Например, мой производственный код (скажем, он выполняет сборку в исполняемый файл) имеет

file_a.c (sub_module A)
   int func_a() {
      ....
   }

file_b.c (module B)
   func_b () {
       ...
       ret = func_a();
       ...
   }

Для модульного теста я использую CppUTest. Если я проверю B с реальным кодом A, то

  1. Мне нужна реальная реализация A,
  2. мы не сможем получить все возможные результаты из func_a().
  3. если func_a () вызывает функции другого модуля, трудно обнаружить / настроить все случаи глубоко внутри цепочек вызовов функций.
  4. mabybe, это слишком экстремально, но я не могу убедить ppl, чем этот подход отличается от объединения всего кода и простого тестирования из main()?

Но если я буду издеваться над func_a () во время тестирования B, то компоновщик будет жаловаться на несколько определений, как только я начну тестировать A, поскольку теперь реальная реализация будет связана. Для этой проблемы я вижу два пути

  1. создайте отдельный исполняемый файл теста для каждого file_a.c и file_b.c. Но это приведет к тому, что по мере роста производства будет создаваться столько исполняемых файлов, а также возникнут сложности, если понадобятся некоторые "реальные" и "фиктивные" комбинированные тесты.
  2. скомпилировать производственный код в качестве разделяемой библиотеки и связать его с исполняемым файлом теста, а затем использовать временные связи, чтобы перехватывать вызовы функций для реальной реализации.

Так что же является обычной практикой для таких сценариев? Я уверен, что это очень распространенный сценарий для модульного тестирования кода c.

Спасибо,

0 ответов

Другие вопросы по тегам