#c #unit-testing #googletest
#c #модульное тестирование #googletest
Вопрос:
В моем приложении на C у меня есть текстовый файл (dataFile.txt), который установлен на целевой машине Linux по следующему пути:
/SoftwareHomeDir/Configuration/Application/dataFile.txt
Этот файл существует в моей среде исходного кода Rational ClearCase по пути:
/ProjectName/config/Application/dataFile.txt
Я разрабатываю unitTest в gtest, который выполняет следующее:
Прочитайте определенные данные из dataFile.txt
, если данные не существуют, затем запишите их в файл.
1) Я избегаю создавать переменную среды, чтобы проверить, нахожусь ли я в среде компиляции или на целевой машине. Затем добавьте дополнительный тестовый код в финальную версию. Я действительно хочу отделить тестовый код от конечного кода.
2) Я не использую никакой IDE (ни visual studio, ни qt и т.д.), Только notepad
3) Компиляция. сервер является общим (доступ с именем пользователя, однако корневая папка «/» является общей. Это означает, что если я создам путь "/SoftwareHomeDir/Confiugration/Application/dataFile.txt"
, он будет виден всем пользователям, и если другой пользователь запускает свой gtest unitTest, он может перезаписать мой файл.
4) В конечном коде путь к файлу данных жестко запрограммирован, и реализация метода filesearch (filename) для поиска файла на всем жестком диске перед чтением файла обходится очень дорого (выполнение займет несколько секунд).
Вопрос:
Я ищу решение для модульного тестирования моего кода в среде компиляции, которая использует /ProjectName/config/Application/dataFile.txt
Комментарии:
1. Либо настройте свое приложение для работы в обеих средах, либо измените обе среды в соответствии с вашим приложением. Поскольку ваше приложение не может быть настроено (вы говорите, что путь к файлу жестко запрограммирован), возможно, вы можете изменить свою среду? Например, можете ли вы использовать символическую ссылку с ожидаемым приложением путем, который указывает на фактический файл в вашей тестовой среде?
2. Я нашел элегантное решение, включающее Google gtest и gmock. Таким образом, я не вношу изменений в код выпуска. Решение состоит в том, чтобы фактически создать функцию getPath, которая возвращает в реальном приложении жестко закодированный путь, т.е. /AppInstallationFolder/Configuration/dataFile.txt Я узнал о делегировании gmock для fake. Таким образом, я вызываю поддельную функцию getPath, которая возвращает тестовый путь (или путь к моему файлу конфигурации в clearcase) с использованием gmock github.com/google/googletest/blob/master/googlemock/docs /…
Ответ №1:
Решением моей проблемы было объединить gmock с gtest, как описано по ссылке
Единственное изменение, которое я внес в свой код, заключается в том, что вместо определения пути к данным конфигурации с помощью #define я создал функцию getConfigFilePath(), которая возвращает жестко заданный путь к файлу конфигурации в установленном приложении. Отсюда я издевался над классом и в своем макете вызывал поддельный getConfigFilePath(), который возвращает при выполнении реального кода жестко заданный путь к файлу конфигурации в дереве проекта в ClearCase. Это именно то, что я искал.