2017-03-24 4 views
0

Je voudrais savoir l'approche recommandée pour obtenir une chaîne de connexion à partir d'un fichier de configuration pour mon xUnit .net projet de test de base.xUnit chaîne de connexion projet de test

J'ai mis en place un projet de test en utilisant le nouveau Visual Studio 2017 xUnit Test modèle de projet pour le noyau .net. Ce projet exécutera mes tests d'intégration qui référencent deux projets de bibliothèque de classes de base .net différents. L'un d'eux parlera à la base de données en utilisant EF Core.

Je comprends que, normalement, la chaîne de connexion ne doit pas être définie ou accessible dans un projet de bibliothèque de classes - il devrait être l'application qui consomme la bibliothèque de classes qui devrait définir la chaîne de connexion.

Cependant, dans ce cas, il semble que le projet de test xUnit est traité un peu comme un projet de bibliothèque de classes. Je n'ai pas vu d'exemples de la façon de mettre en place une sorte de fichier de configuration et d'accéder à partir du projet de test. Comment puis-je accéder à la chaîne de connexion à partir d'un fichier de configuration afin que mon projet de test puisse consommer mon projet de bibliothèque de classes Datalayer et transmettre la chaîne de connexion appropriée?

+0

Avez-vous besoin d'une chaîne de connexion dans vos tests ou quelque chose comme 'TestServer' (https://msdn.microsoft.com/fr-fr/library/microsoft.owin.testing.testserver(v=vs.113) .aspx) suffirait? – Ignas

+0

Voir ma solution ci-dessous - merci – user1750537

Répondre

4

J'ai pu accéder à la chaîne de connexion de mon projet de test xUnit en créant une classe DbOptionsFactory qui retourne un objet DbContextOptions initialisé avec une chaîne de connexion lue à partir d'un fichier de configuration appsettings.json.

Cela nécessite une dépendance à l'égard Microsoft.Extensions.Configuration

public static class DbOptionsFactory 
{ 
    static DbOptionsFactory() 
    { 
     var config = new ConfigurationBuilder() 
      .AddJsonFile("appsettings.json") 
      .Build(); 
     var connectionString = config["Data:DefaultConnection:ConnectionString"]; 

     DbContextOptions = new DbContextOptionsBuilder<MyDbContext>() 
      .UseSqlServer(connectionString) 
      .Options; 
    } 

    public static DbContextOptions<MyDbContext> DbContextOptions { get; } 

} 

appsettings.json

{ 
    "Data": { 
    "DefaultConnection": { 
     "Name": "MyDbContext", 
     "ConnectionString": "connection string goes here" 
    } 
} 
} 

Quand instanciation mon DbContext je passe dans l'objet optionsBuilder qui a la chaîne de connexion à partir du fichier de configuration comme ceci:

using (var context = new MyDbContext(DbOptionsFactory.DbContextOptions)) 
{ 
    // access db here 
} 

Espérons que ceci aide anyon e d'autre qui se heurte au même problème.

+0

je devais installer le paquet Microsoft.Extensions.Configuration.Json NuGet pour obtenir AddJsonFile. –