xUnit测试项目连接字符串

xUnit test project connection string

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

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

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

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

我能够通过创建一个 DbOptionsFactory class 从我的 xUnit 测试项目访问连接字符串,returns 一个 DbContextOptions 对象使用它从 [=23= 读取的连接字符串初始化] 配置文件。

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

希望这对遇到同样问题的其他人有所帮助。