Мне нужно написать модульный тест для некоторого кода C++, который проверяет наличие переменной окружения. Я использую MSVS 2008 и gtest в качестве основы. Я добавляю переменную окружения с помощью putenv, проверяю переменную окружения с помощью getevn, но не могу понять, как ее убрать, чтобы ни один другой тест ее не увидел. Я понимаю, что это, вероятно, легко, но я не могу найти ответ в Интернете. Спасибо
Удалить переменную окружения программно
Ответы (4)
Повторный вызов putenv с указанием "SOME_VAR=" в качестве параметра удалит переменную среды SOME_VAR. Кстати, Microsoft рекомендует использовать _putenv, поскольку putenv устарело.
person
341008
schedule
08.07.2010
Обратите внимание, что, по крайней мере, для Solaris эта функция не упоминается на странице руководства.
- person Mark B; 08.07.2010
Он использует MSVS 2008. Подразумевается, что он работает в Windows. В Linux я бы использовал setenv и unsetenv. Не знаю, есть ли они у Соляриса.
- person 341008; 08.07.2010
Вы всегда можете разветвить/выполнить подпроцесс, чтобы выполнить только тестирование putenv/getenv, а затем, когда он завершится, не останется никакой случайной среды.
person
Mark B
schedule
08.07.2010
Я думал об этом, но искал более чистое решение
- person Steve; 08.07.2010
Как насчет установки env var в пустую строку?
Из cmd.exe это работает:
set SOMEVAR=something
echo %SOMEVAR%
set SOMEVAR=
echo %SOMEVAR%
Где последний показывает, что он был удален.
person
rubenvb
schedule
08.07.2010
вы можете использовать функцию unsetenv.
Если в vc2008 эта функция отсутствует, вы можете получить прямой доступ к среде, используя getenv_s и удалите запись вручную, имитируя unsetenv.
person
tonio
schedule
08.07.2010
Это действительно доступно в Windows без использования подсистемы POSIX? Google выдает противоречивые результаты...
- person Nicholas Knight; 08.07.2010