В настоящее время я пишу кучу пакетных файлов и сопровождающих модульных / интеграционных тестов, чтобы убедиться, что они дали желаемый эффект.
Однако один из командных файлов должен устанавливать переменную среды.Насколько я могу сказать, единственный способ установить переменную окружения в DOS на уровне машины - это использовать команду SetX:
setX My_Variable_Name My_Variable_Value -m
И это делает то, что он должен.Но подвох заключается в том, что, поскольку это изменяет реестр, переменная среды не распознается как установленная до тех пор, пока не закроется окно DOS.Итак, соответствующий бит моего кода, который запускает пакетный файл, выглядит следующим образом:
ProcessStartInfo p = new System.Diagnostics.ProcessStartInfo(filePath + fileToRun);
p.WorkingDirectory = filePath;
Process proc = new System.Diagnostics.Process();
proc.StartInfo = p;
proc.Start();
proc.WaitForExit();
А затем, после того как он был вызван в модульном тесте, я проверяю переменную среды следующим образом:
Assert.AreSame("My_Variable_Value", Environment.GetEnvironmentVariable("My_Variable_Name"), "Primary Customers Server Name improperly set");
Но это не помогло - пошаговое выполнение с помощью QuickWatch показывает, что Environment.GetEnvironmentVariable ("My_Variable_Name") имеет значение null.
Я несколько смущен этим поведением.Так как я вызываю WaitForExit для процесса, который запускает пакетный файл, конечно, к тому времени, когда мое Утверждение вызывается, пакет будет завершен, и должна быть установлена переменная среды?И если вы откроете новое окно dos после провала теста и проверите существование My_Variable_Name, для него будет установлено ожидаемое значение.
Итак, код работает, но я не могу разработать тест, который проверяет его должным образом.Могу ли я что-нибудь сделать, чтобы тест смог подобрать значение переменной среды?
Cheers, Matt