xUnit测试项目连接字符串

Pac*_*der 3 connection-string xunit .net-core

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

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

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

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

Pac*_*der 6

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

这需要对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; }

}
Run Code Online (Sandbox Code Playgroud)

appsettings.json

{   
  "Data": {
  "DefaultConnection": {
      "Name": "MyDbContext",
      "ConnectionString": "connection string goes here"
   }   
 }
}
Run Code Online (Sandbox Code Playgroud)

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

using (var context = new MyDbContext(DbOptionsFactory.DbContextOptions))
{  
     // access db here
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我必须安装Microsoft.Extensions.Configuration.Json NuGet包才能获取AddJsonFile。 (2认同)