2016-04-29 10 views
6

Desidero utilizzare IHostingEnvironment e ConfigurationBuilder nel mio progetto di test funzionale, in modo che, in base all'ambiente, i test funzionali vengano eseguiti utilizzando un diverso set di configurazione. Voglio utilizzare il codice qui sotto:Utilizzo di ConfigurationBuilder di ASP.NET Core in un progetto di prova

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

voglio avere un file appSettings.json e appSettings.Production.json per puntare i miei test funzionali alla produzione. È possibile? Come può essere raggiunto? Avrei bisogno di un'istanza di IHostingEnvironment.

risposta

7

È possibile utilizzare l'ConfigurationBuilder in un progetto di test con un paio di passaggi. Non penso che ti serva l'interfaccia IHostingEnvironment.

In primo luogo, aggiungere due pacchetti Nuget al progetto che hanno i metodi ConfigurationBuilder di estensione:

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

In secondo luogo, mettere le variabili d'ambiente desiderati nella proprietà del progetto di prova:

environment variable dialog

Quindi è possibile creare il proprio builder nel progetto di test:

Se si desidera utilizzare esattamente lo stesso file di impostazioni (non una copia), è necessario aggiungere un percorso.

+0

Il mio progetto di test ignora completamente qualsiasi configurazione impostata; sta eseguendo il mio progetto principale 'Startup' anche quando ho rimosso tutti i riferimenti ad esso dalla mia classe di test. Non riesco a capirlo. : / – vaindil

0

Ciò è possibile, in base alla documentazione di ASP.NET Core (http://docs.asp.net/en/latest/fundamentals/configuration.html) è possibile creare questo all'interno del metodo di avvio e aggiungere la variabile di ambiente appSettings. Quando si specifica il flag opzionale, è possibile utilizzare appSettings.Production.json per l'ambiente di produzione e appSettings.json per lo sviluppo quando non è disponibile appSettings.Development.json. Il {} env.EnvironmentName .json appsettings. Viene utilizzato solo quando il file è presente e il fallback è l'appsettings.json predefinita

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

Quindi devo aggiungere una classe di avvio nel mio progetto di test? –

+0

Sì, vedo che il post di Will aggiunge più dettagli. Ma puoi seguire un tutorial per creare un'applicazione web con ASP.NET 5 o da zero. Controllare http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html e https://docs.asp.net/en/latest/fundamentals/startup.html –

Problemi correlati