Модульное тестирование модуля C статической переменной - PullRequest
2 голосов
/ 23 ноября 2011

У меня есть модуль C, и я хочу немного провести рефакторинг.Есть некоторые глобальные переменные и структуры, которые не скрыты (в файле module.h).Я использую эти переменные в каком-то тестовом примере, но нигде больше, поэтому я подумал, что было бы неплохо установить их в статические.В моих тестовых случаях я извлекаю эти переменные и заполняю тестовыми значениями.Но если они будут статическими переменными, я не смогу добраться до них из теста.Я не хочу писать методы получения и установки и помещать их в файл .h, потому что я хочу скрыть эти переменные.

Я знаю, что если я включу файл .c в свой тестовый пример, я смогу увидеть статические переменные.Есть ли другой способ заполнить эти переменные?

Я использую cygwin и gcc, тестовая среда - CppUtest.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Существует две основные возможности:

  1. Сложность тестирования показывает, что интерфейс, предоставленный модулем, неполон.
  2. Ваше модульное тестирование подсчитывает внутреннюю частьмодуль таким образом, что потребители никогда не должны будут делать.

Если проблема заключается в неполном интерфейсе, то вы можете добавить дополнительные интерфейсы, которые делают модуль более легко тестируемым и более удобным для использования.Например, если статические переменные являются какими-то счетчиками, вам может понадобиться добавить метод «сброса», чтобы обнулить счетчики, готовые к следующей части модульного тестирования, или (в более общем случае использования)чтобы обнулить статистику, чтобы вы могли накапливать статистику заново.

Если проблема заключается в модульном тестировании, которое требует более глубокого исследования, чем потребители, то я не вижу ничего плохого в тестекод с использованием #include "sourcecode.c".Содержит код модуля в чистоте для общего пользования;это позволяет модульному тесту исследовать более глубоко, чем это было бы иначе.Он преобразует тестовый код из тестирования «черного ящика» в форму тестирования «белого ящика» - тест может увидеть больше тестируемого кода, чем обычный тест черного ящика.Но это иногда полезно.Часто это промежуточная стадия развития.После того, как вы проведете все испытания «черного ящика», вам, возможно, не придется беспокоиться о том, чтобы исследовать внутренние органы таким же образом - пока вы не внесете изменения.

0 голосов
/ 23 ноября 2011

Часто хорошей идеей является создание этих статических переменных в отдельном файле (некоторым нравится называть это скаффолдингом), чтобы вы могли избежать включения .c. Основная теория заключается в том, что если вы всегда включаете файлы .c, то быстро становится невозможным модульное тестирование, поскольку вся идея модульного тестирования заключается в детализации и тестировании одного бита кода, не зависящего от остального. Как только вы включаете все эти внешние файлы .c, вы этого не делаете.

...