2016-04-29 16 views
6

İşlevsel test projemde IHostingEnvironment ve ConfigurationBuilder kullanmak istiyorum, böylece işlevsel sınamalar farklı bir yapılandırma kümesi kullanarak çalışır.Bir Test Projesinde ASP.NET Çekirdeğinin YapılandırmaBuilder'ı Kullanma

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

Ben üretimde benim fonksiyonel testler işaret edecek bir appSettings.json ve appSettings.Production.json dosya istiyorum: Aşağıda koddan yararlanmak istiyoruz. Mümkün mü? Nasıl başarılabilir? IHostingEnvironment örneğine ihtiyacım var.

cevap

7

Sen adımların bir çift ile bir test projesinde ConfigurationBuilder kullanabilirsiniz olduğunu. IHostingEnvironment arayüzüne ihtiyacınız olacağını düşünmüyorum.

Öncelikle ConfigurationBuilder uzatma yöntemleri var ki projenize iki Nuget paketleri ekleyin:

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

İkinci test projenin özelliklerine içine istenilen ortam değişkenleri koyun:

environment variable dialog

Ardından, test projesinde kendi oluşturucunuzu oluşturabilirsiniz:

Eğer tamamen aynı ayarları dosyasını (bir kopya) kullanmak istiyorsanız
private readonly IConfigurationRoot _configuration; 

public BuildConfig() 
{ 
    var environmentName = Environment.GetEnvironmentVariable("Hosting:Environment"); 

    var config = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json") 
     .AddJsonFile($"appsettings.{environmentName}.json", true) 
     .AddEnvironmentVariables(); 

    _configuration = config.Build(); 
} 

, o zaman buna bir yolda eklemeniz gerekir.

+0

Testim projesini edin belirlediğim tüm ayarları tamamen yok sayıyor; Test projemden tüm referansları kaldırdığımda bile ana projemin 'Startup'ını çalıştırıyor. Bunu anlayamıyorum. : / – vaindil

0

Bu, ASP.NET Çekirdek belgelerine (http://docs.asp.net/en/latest/fundamentals/configuration.html) göre mümkündür, bunu Başlangıç ​​yönteminin içine kurabilir ve Ortam değişkeni appSettings öğesini ekleyebilirsiniz. İsteğe bağlı bayrağı belirtirken, appSettings.Development.json yokken üretim ortamı için appSettings.Production.json ve geliştirme için appSettings.json kullanabilirsiniz. dosya varken appsettings. {env.EnvironmentName} .json sadece kullanılır ve geri dönüş varsayılan 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

Test projemde bir Başlangıç ​​sınıfı eklemem gerekiyor mu? –

+0

Evet, Will'in daha fazla ayrıntı eklediğini görüyorum. Ancak, ASP.NET 5 ile veya sıfırdan bir web uygulaması oluşturmak için bir eğiticiyi takip edebilirsiniz. http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html ve https://docs.asp.net/en/latest/fundamentals/startup.html –

İlgili konular