使用 xunit 在 .NET Core 集成测试中获取数据库连接字符串
Getting database connection string in .NET Core integration tests with xunit
我正在为我的 .net 核心做集成测试project.I 需要访问我的集成测试数据库的连接字符串。
我正在使用我的基础项目作为参考并使用它的启动文件。但是我收到这个错误
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)
我的 TestClientProvider class
public class TestClientProvider
{
public HttpClient Client { get; private set; }
public TestClientProvider()
{
var server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
Client = server.CreateClient();
}
}
测试class
public class UnitTest1
{
[Fact]
public async Task Test_Get()
{
var client = new TestClientProvider().Client;
var response = await client.GetAsync("/api");
response.EnsureSuccessStatusCode();
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
}
如何让测试使用我当前的数据库?
我已通过获取 appsettings.json 文件并在 TestProvider class 中配置数据库连接来解决此问题。
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();
}
}
我正在为我的 .net 核心做集成测试project.I 需要访问我的集成测试数据库的连接字符串。
我正在使用我的基础项目作为参考并使用它的启动文件。但是我收到这个错误
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)
我的 TestClientProvider class
public class TestClientProvider
{
public HttpClient Client { get; private set; }
public TestClientProvider()
{
var server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
Client = server.CreateClient();
}
}
测试class
public class UnitTest1
{
[Fact]
public async Task Test_Get()
{
var client = new TestClientProvider().Client;
var response = await client.GetAsync("/api");
response.EnsureSuccessStatusCode();
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
}
如何让测试使用我当前的数据库?
我已通过获取 appsettings.json 文件并在 TestProvider class 中配置数据库连接来解决此问题。
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();
}
}