2017-10-25 2 views
0

Ich muss Verbindungszeichenfolgen und andere Einstellungen in meinen .NET Core 2.0-Integrationstests speichern (es handelt sich also um ein Testprojekt mit xUnit). Wie kann ich dies unter Berücksichtigung der lokal und in VSTS ausgeführten Tests sicher tun? Idealerweise benötige ich diese Einstellungen für die lokale Umgebung getrennt und auf VSTS ausgeführt..net Core 2.0 Tests - wie Einstellungen in Testprojekten gespeichert werden?

+2

nicht relevant - ich spreche * Test * Projekt (xUnit). Es hat nicht alles. – alvipeo

+0

Lösen Sie dieses Problem mit meiner Lösung? –

Antwort

0

Sie können mehrere Konfigurationsdateien, wie appsettings.json, appsettings.dev.json, appsettings.test.json, fügen Sie dann stellen Sie den dev Wert für relevante Umgebungsvariable und setzen Test Wert für verwandte Variable des Builds.

Danach den Wert in appsettings.test.json Datei durch Token Replace Aufgabe

Einfache Schritte ersetzen:

  1. Installieren Microsoft.Extensions.Configuration.Json package zu Ihrem xUnit Testprojekt
  2. appsettings.json hinzufügen, appsettings.dev.json und appsettings.test.json Konfigurationsdateien zum Projekt

appsettings.json:

{ 
    "ConnectionStrings": { 
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;" 
    }, 
    "OtherSettings": { 
    "UserName": "name1", 
    "Pass": "pass1" 
    } 
} 

appsettings.dev.json:

{ 
    "ConnectionStrings": { 
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=dev;Trusted_Connection=True;" 
    }, 
    "OtherSettings": { 
    "UserName": "devname1", 
    "Pass": "pass1" 
    } 
} 

appsettings.test.json:

{ 
    "ConnectionStrings": { 
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=#{testDev}#;Trusted_Connection=True;" 
    }, 
    "OtherSettings": { 
    "UserName": "#{testName}#", 
    "Pass": "pass1" 
    } 
} 
  1. Set Kopieren nach Ausgabe Verzeichnis Eigenschaft dieser Dateien zu Kopieren, wenn neuere. 4: Einfacher Testcode

:

  [Fact] 
      public void Test1() 
      { 
       var envVariable = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 

       Console.WriteLine($"env: {envVariable}"); 
       var config = new ConfigurationBuilder() 
        .AddJsonFile("appsettings.json") 
        .AddJsonFile($"appsettings.{envVariable}.json", optional: true) 
        .Build(); 
       var conn = config.GetConnectionString("BloggingDatabase"); 
       var otherSettings = config["OtherSettings:UserName"]; 
       Console.WriteLine(conn); 
       Console.WriteLine(otherSettings); 
      } 
  1. hinzufügen ASPNETCORE_ENVIRONMENT (Wert: test), testDev und Testname Variablen Definition zu bauen Sie können auf das Schlosssymbol klicken, um den Variablentyp in das geheime zu ändern.
  2. hinzufügen Ersetzen Aufgabe Tokens vor Build-Task (Target-Dateien: **\appsettings.test.json)
+0

Ich habe es gerade versucht. Ich kann ASPNETCORE_ENVIRONMENT nicht erhalten. Es ist immer leer, wenn ich Tests lokal ausführen :(Wie stellen Sie ASPNETCORE_ENVIRONMENT für Test-Projekt (xUnit) in VS2017? – alvipeo

+0

Setzen Sie einfach Umgebungsvariable in Ihrem Rechner. –

+0

das könnte funktionieren, aber es ist sehr unbequem. – alvipeo