プロジェクトプロパティページを使用してVisual Studio 2017で.Net Core Webプロジェクトの環境変数を設定すると、Environment.GetEnvironmentVariable
を使用して変数の値を読み取ることができます。ただし、xUnitテストプロジェクトの環境変数を設定してからテストをデバッグすると、Environment.GetEnvironmentVariable
は常にnullを返します。変数がWebプロジェクトと同じように使用されないようにするテストプロジェクトであるという事実について何かありますか?もしそうなら、テストプロジェクトの環境変数を設定する方法はありますか?ありがとうございました。xUnit TestでGetEnvironmentVariableを使用する必要がありますか?
答えて
GetEnvironmentVariable
はxUnitテストでうまく動作します。 問題は、変数を正しく設定することです。変数をProperties -> Debug
ページに設定すると、変数はProperties\launchSettings.json
に書き込まれ、Visual Studioは選択したプロファイルですべての作業を開始します。ご覧のように、デフォルトではlaunchSettings.json
も出力フォルダにコピーされません。このファイルをdotnet run
またはdotnet test
への引数として渡すことは不可能です。これは、テストがCIサーバー上で自動的に実行されると明らかに問題になります。したがって、launchSettings.json
がテストランナーによって考慮されないことは驚くことではありません。
ソリューション:
- コンストラクタ
- 基本クラス
- Fixture
たとえば、このコレクション器具:セットアップする方法のxUnitでテスト環境がたくさんありますすべての環境変数をlaunchSettings.json
から設定します。
public class LaunchSettingsFixture : IDisposable
{
public LaunchSettingsFixture()
{
using (var file = File.OpenText("Properties\\launchSettings.json"))
{
var reader = new JsonTextReader(file);
var jObject = JObject.Load(reader);
var variables = jObject
.GetValue("profiles")
//select a proper profile here
.SelectMany(profiles => profiles.Children())
.SelectMany(profile => profile.Children<JProperty>())
.Where(prop => prop.Name == "environmentVariables")
.SelectMany(prop => prop.Value.Children<JProperty>())
.ToList();
foreach (var variable in variables)
{
Environment.SetEnvironmentVariable(variable.Name, variable.Value.ToString());
}
}
}
public void Dispose()
{
// ... clean up
}
}
はテストからファイルにアクセスできるようにlaunchSettings.json
ためCopy to output directory: Always
を設定します。
素晴らしいソリューション@Ilya。投稿していただきありがとうございます。私はlaunchSettings.jsonファイルについても知らなかった。 – Eric
@エリック、ありがとうございました。実際には、テスト環境をセットアップするために 'launchsettings.json'を使用しません。代わりに、単純化された単一のjson Key-Valueファイルを作成します。ソリューション内のすべての統合テストプロジェクトのリンクとして共有されています。複数の環境/プロファイルを保持する必要がある場合は、ASP.NET Coreの 'appsettings.json'のようにconfigトランスフォームを考慮してください。 –
- 1. RecyclerViewでCursorLoaderを使用する必要がありますか?
- 2. DynamoDBでEC2を使用する必要がありますか?
- 3. Parcel.writeSerializableをParcelable.writeToParcelで使用する必要がありますか?
- 4. フォントでwebpackを使用する必要がありますか?
- 5. /csv:WriteAll()でError()を使用する必要がありますか?
- 6. ユニットテストでAutoMapperを使用する必要がありますか?
- 7. http.ListenAndServeでgoroutinesを使用する必要がありますか?
- 8. Erlangでワーカープールを使用する必要がありますか?
- 9. GCMでGooglePlayServicesを使用する必要がありますか?
- 10. ディスパッチブロックで「weakSelf」を使用する必要がありますか?
- 11. プロダクションコードでfmtを使用する必要がありますか?
- 12. Node.jsでBabelを使用する必要がありますか?
- 13. ngModelChangeをカスタムフォームコントロールで使用する必要がありますか?
- 14. ライブラリでモデルを使用する必要がありますか?
- 15. @synthesizeをまだ使用する必要がありますか?
- 16. <c:if test = "$ {!request.isRequestedSessionIdFromCookie()}">名前空間で使用する必要がありますか?
- 17. HTML5構文を使用する必要がありますか?
- 18. DreamweaverのSpryを使用する必要がありますか?
- 19. オンラインゲームにTCPを使用する必要がありますか?
- 20. Rails 3.1:CoffeeScriptを使用する必要がありますか?
- 21. MVVMにDataTemplatesを使用する必要がありますか?
- 22. addTestDeviceを使用する必要がありますか?
- 23. なぜvalue.lengthを使用する必要がありますか?
- 24. 私はsingletableviewを使用する必要がありますか?
- 25. どのレイアウトマネージャを使用する必要がありますか?
- 26. mysql_close(接続)を使用する必要がありますか?
- 27. インテントサービスを使用する必要がありますか?
- 28. f:paramを使用する必要がありますか?
- 29. アクセサーを使用する必要がありますか?
- 30. UUIDなどを使用する必要がありますか?
テストプロジェクトの環境変数の設定方法を示してください。 –
@Ilya、方法を知っていればスクリーンショットを追加します。 Visual Studio 2017で、単体テストプロジェクトの[プロパティ]ウィンドウを開きます。 [デバッグ]タブには、環境変数を入力できるグリッドがあります。カスタムプロジェクトをWebプロジェクトに追加すると、デバッグしているときに読み込むことができますが、単体テストプロジェクトで設定すると値はnullになります。 – Eric