Можете ли вы установить временные переменные среды для конфигураций MSTest Run? - PullRequest
6 голосов
/ 07 июня 2011

Я использую MSTest в Visual Studio 2008 с C #. У меня есть определенная переменная среды, которую я хотел бы, и изменение пути, которое я хотел бы делать только во время выполнения определенных тестов или, что еще лучше, всех тестов в конфигурации запуска.

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

Есть ли другой способ настроить временные системные переменные среды, которые будут действительны во время всех тестов?

Ответы [ 2 ]

5 голосов
/ 10 июня 2011

Хотя я не доволен этим решением, я смог получить то, что мне нужно было сделать с помощью MSTest, используя ClassInitializeAttribute для тестового класса, а затем с помощью Environment.SetEnvironmentVariable внести необходимые изменения, а затем очистить это вметод, украшенный классом ClassCleanupAttribute.

Из-за отсутствия лучшего ответа я смог установить переменные окружения для группы тестов и очистить их, когда закончил.Однако я бы предпочел, чтобы это обрабатывалось за пределами CODE и каким-то образом было частью тестовой конфигурации.Независимо от того, проблемы были решены.

1 голос
/ 07 июня 2011

Если вы уверены, что ваш набор тестов не будет «прерван» в середине теста, вы можете использовать методы FixtureSetup и FixtureTeardown, чтобы установить, а затем удалить измененные переменные среды.

РЕДАКТИРОВАТЬ ИЗ КОММЕНТАРИИ: Я вижу, откуда вы, но как и в моем редактировании, UT-фреймворк предназначен для создания модульных тестов.Концепция модульного теста предполагает, что он НЕ должен зависеть от каких-либо внешних ресурсов, включая переменные среды.Тесты, которые делают это, являются интеграционными тестами и требуют наличия большого количества инфраструктуры (и обычно они занимают много раз дольше, чем наборы модульных тестов с одинаковым LOC).

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

Если это действительно интеграционный тести вам действительно нужен набор переменных среды (скажем, вы меняете путь, чтобы вы могли использовать Process.Start для вызова своего собственного notepad.exe вместо Windows), для этого нужны методы / атрибуты FixtureSetup и FixtureTeardown;выполнить сложную настройку фиксированной, повторяемой среды, в которой тесты должны быть успешными, и затем вернуть среду в исходное состояние независимо от того, что произошло в тестах.Обычно в случае сбоя теста возникает исключение и немедленно завершается выполнение этого теста, поэтому выполнение кода в конце самого метода теста не гарантируется.

...