xUnit测试项目连接字符串

时间:2017-03-24 23:19:30

标签: connection-string .net-core xunit

我想知道从我的xUnit .net核心测试项目的配置文件中获取连接字符串的推荐方法。

我使用.net核心的新Visual Studio 2017 xUnit Test项目模板设置了一个测试项目。该项目将运行我的集成测试,该测试引用2个不同的.net核心类库项目 - 其中一个将使用EF Core与数据库通信。

我理解通常不应在类库项目中设置或访问连接字符串 - 它应该是使用应该设置连接字符串的类库的应用程序。

但是,在这种情况下,xUnit测试项目看起来有点像类库项目。我还没有看到任何关于如何设置某种配置文件并从测试项目中访问它的示例。如何从配置文件访问连接字符串,以便我的测试项目可以使用我的Datalayer类库项目并传入适当的连接字符串?

1 个答案:

答案 0 :(得分:5)

我能够通过创建一个DbOptionsFactory类来访问我的xUnit测试项目中的连接字符串,该类返回一个DbContextOptions对象,该对象使用从appsettings.json配置文件中读取的连接字符串进行初始化。

这需要依赖于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"
   }   
 }
}

在实例化我的DbContext时,我传入了optionsBuilder对象,该对象具有来自配置文件的连接字符串,如下所示:

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

希望这可以帮助遇到同样问题的其他人。