私は現在、バッチファイルとそれに付随するユニット/統合テストをたくさん書いています。マシンレベルのWindows環境変数のユニットテスト
しかし、バッチファイルの1つが環境変数を設定することになっています。私の知る限りは、マシンレベルで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の存在を確認すると、期待値に設定されています。
コードは機能しますが、正しくチェックするテストを設計することはできません。テストで環境変数の値を取得できるようにするためにできることはありますか?
乾杯、 マット