модульные тесты gtest путь к целевому файлу конфигурации - PullRequest
0 голосов
/ 06 марта 2019

В моем приложении C ++ у меня есть текстовый файл (dataFile.txt), который установлен на целевой машине Linux по следующему пути:

/SoftwareHomeDir/Configuration/Application/dataFile.txt

Этот файл существует в моей среде исходного кода Rational ClearCaseпо пути:

/ProjectName/config/Application/dataFile.txt

Я разрабатываю unitTest в gtest, который выполняет следующие действия:

Считайте конкретные данные из dataFile.txt, если данные не существуют, чем запишите их вфайл.

1) Я избегаю создавать переменную среды, чтобы проверить, нахожусь ли я в среде компиляции или на целевой машине.Затем добавьте дополнительный тестовый код в финальную версию.Я действительно хочу отделить тестовый код от окончательного кода.

2) Я не использую какую-либо IDE (без визуальной студии, без qt и т. Д.), Просто блокнот ++

3) Компиляция.сервер является общим (доступ с именем пользователя, однако корневая папка "/" является общей. Это означает, что если я создам путь "/SoftwareHomeDir/Confiugration/Application/dataFile.txt", он будет виден всем пользователям, и если другой пользователь запускает свой gtest unitTest, онможет перезаписать мой файл.

4) В конечном коде путь к файлу данных жестко запрограммирован, и реализация метода поиска файлов (имя файла) для поиска очень затратна (займет несколько секунд)для файла на всем жестком диске перед чтением файла.

Вопрос:

Я ищу решение для модульного тестирования моего кода в среде компиляции, использующего /ProjectName/config/Application/dataFile.txt

1 Ответ

0 голосов
/ 10 марта 2019

Решением моей проблемы было объединение gmock с gtest, как описано по ссылке

https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#delegating-calls-to-a-fake

Единственное изменение, которое я внес в свой код, состоит в том, что вместо определения пути киспользуя данные конфигурации #define, я создал функцию getConfigFilePath (), которая возвращает жестко заданный путь к файлу конфигурации в установленном приложении.Отсюда я издевался над классом, и в моем макете я вызываю фальшивую функцию getConfigFilePath (), которая при выполнении реального кода возвращает жесткий код пути к файлу конфигурации в дереве проекта в ClearCase.Это именно то, что я искал.

...