C# 使用xunit在.NET核心集成测试中获取数据库连接字符串

C# 使用xunit在.NET核心集成测试中获取数据库连接字符串,c#,asp.net-core,.net-core,xunit.net,C#,Asp.net Core,.net Core,Xunit.net,我正在为我的.net核心项目进行集成测试。我需要访问集成测试数据库的连接字符串 我使用我的基础项目作为参考,并使用它的启动文件。但我得到了这个错误 System.ArgumentNullException : Value cannot be null. Parameter name: connectionString at Npgsql.EntityFrameworkCore.PostgreSQL.Utilities.Check.NotEmpty(String value, String pa

我正在为我的.net核心项目进行集成测试。我需要访问集成测试数据库的连接字符串

我使用我的基础项目作为参考,并使用它的启动文件。但我得到了这个错误

System.ArgumentNullException : Value cannot be null.
Parameter name: connectionString at Npgsql.EntityFrameworkCore.PostgreSQL.Utilities.Check.NotEmpty(String 
value, String parameterName) in 
/home/roji/projects/EFCore.PG/src/EFCore.PG/Utilities/Check.cs:line 99   
at Microsoft.EntityFrameworkCore.NpgsqlDbContextOptionsExtensions.UseNpgsql(DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 npgsqlOptionsAction) in /home/roji/projects/EFCore.PG/src/EFCore.PG/Extensions/NpgsqlDbContextOptionsExtensions.cs:line 49
at SurveyAPI.Startup.<ConfigureServices>b__4_1(DbContextOptionsBuilder options)

如何使测试使用我当前的数据库?

我已通过获取appsettings.json文件并在TestProvider类中配置数据库连接解决了此问题

public class TestClientProvider
{
    public HttpClient Client { get; private set; }

    public TestClientProvider()
    {   
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();

        WebHostBuilder webHostBuilder = new WebHostBuilder();
        webHostBuilder.ConfigureServices(s => s.AddDbContext<DatabaseContext>(options => options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"))));
        webHostBuilder.UseStartup<Startup>();

        var server = new TestServer(webHostBuilder);

        Client = server.CreateClient();
    }
}
公共类TestClientProvider
{
公共HttpClient客户端{get;private set;}
公共TestClientProvider()
{   
IConfigurationRoot配置=新配置生成器()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile(“appsettings.json”)
.Build();
WebHostBuilder WebHostBuilder=新的WebHostBuilder();
webHostBuilder.ConfigureServices(s=>s.AddDbContext(options=>options.UseNpgsql(configuration.GetConnectionString(“DefaultConnection”)));
webHostBuilder.UseStartup();
var服务器=新的测试服务器(webHostBuilder);
Client=server.CreateClient();
}
}

我通过获取appsettings.json文件并在TestProvider类中配置数据库连接,解决了这个问题

public class TestClientProvider
{
    public HttpClient Client { get; private set; }

    public TestClientProvider()
    {   
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();

        WebHostBuilder webHostBuilder = new WebHostBuilder();
        webHostBuilder.ConfigureServices(s => s.AddDbContext<DatabaseContext>(options => options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"))));
        webHostBuilder.UseStartup<Startup>();

        var server = new TestServer(webHostBuilder);

        Client = server.CreateClient();
    }
}
公共类TestClientProvider
{
公共HttpClient客户端{get;private set;}
公共TestClientProvider()
{   
IConfigurationRoot配置=新配置生成器()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile(“appsettings.json”)
.Build();
WebHostBuilder WebHostBuilder=新的WebHostBuilder();
webHostBuilder.ConfigureServices(s=>s.AddDbContext(options=>options.UseNpgsql(configuration.GetConnectionString(“DefaultConnection”)));
webHostBuilder.UseStartup();
var服务器=新的测试服务器(webHostBuilder);
Client=server.CreateClient();
}
}

可能重复@jmdon no这不起作用可能重复@jmdon no这不起作用这可能是另一个问题的答案,但这是有效的解决方案。它可能是另一个问题的答案,但这是有效的解决方案。
public class TestClientProvider
{
    public HttpClient Client { get; private set; }

    public TestClientProvider()
    {   
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();

        WebHostBuilder webHostBuilder = new WebHostBuilder();
        webHostBuilder.ConfigureServices(s => s.AddDbContext<DatabaseContext>(options => options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"))));
        webHostBuilder.UseStartup<Startup>();

        var server = new TestServer(webHostBuilder);

        Client = server.CreateClient();
    }
}