2016-04-29 6 views
6

機能テストプロジェクトでIHostingEnvironmentおよびConfigurationBuilderを使用したいので、環境によっては異なる設定の設定を使用して機能テストを実行します。私は以下のコードを使用する:テストプロジェクトでASP.NET CoreのConfigurationBuilderを使用する

public IConfigurationRoot ConfigureConfiguration(IHostingEnvironment hostingEnvironment) 
{ 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json") 
     .AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", true) 
     .AddEnvironmentVariables(); 
    return builder.Build(); 
} 

私は生産で私の機能テストを指すようにappSettings.jsonappSettings.Production.jsonファイルを持っていると思います。これは可能ですか?どのように達成することができますか? IHostingEnvironmentのインスタンスが必要です。

答えて

7

あなたが手順のカップルとテストプロジェクトでConfigurationBuilderを使用することができます。私はあなたがIHostingEnvironmentインタフェース自体を必要とは思いません。

まず、ConfigurationBuilder拡張メソッド持っているプロジェクトに2つのNuGetパッケージを追加します。

"dependencies": { 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final" 
} 

第二に、テストプロジェクトのプロパティの中にご希望の環境変数を置く:

environment variable dialog

そして、あなたがテストプロジェクトに独自のビルダーを作成することができます。

同じ設定ファイル(コピーではない)を正確に使用したい場合は、パスを追加する必要があります。

+0

私のテストプロジェクトをチェック完全に私が設定されたすべての設定を無視しています。私が私のテストクラスから、それへのすべての参照を削除しても、私の主なプロジェクトの 'Startup'を実行しています。私はこれを理解できません。 :/ – vaindil

0

これはスタートアップメソッドの内部でこれを構築し、環境変数のappSettingsを追加することができますASP.NETコアのドキュメント(http://docs.asp.net/en/latest/fundamentals/configuration.html)によると、可能です。オプションのフラグをspecifingすると利用可能なappSettings.Development.jsonがないときは、開発のための生産環境のためのappSettings.Production.jsonとappSettings.jsonを使用することができます。ファイルが存在する場合のAppSettings。{} env.EnvironmentName .jsonにのみ使用され、フォールバックがデフォルトappsettings.json

public Startup(IHostingEnvironment env) 
{ 
    // Set up configuration providers. 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json") 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 

    if (env.IsDevelopment()) 
    { 
     // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 
     builder.AddUserSecrets(); 
    } 

    builder.AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 
+0

だから私は、私のテストプロジェクトのスタートアップクラスを追加する必要がありますか? –

+0

はい、私はウィルのポストは、より詳細な情報を追加していることがわかります。しかし、チュートリアルに従うことで、ASP.NET 5を使用してWebアプリケーションを作成したり、スクラッチから作成することができます。 http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.htmlとhttps://docs.asp.net/en/latest/fundamentals/startup.html –