我已经花了一些时间来弄清楚如何让Testcontainer的MsSqlContainer为我的集成测试旋转起来.它工作正常,但是.如果每次都是随机的,你如何告诉真实的API它在哪个端口上运行?
我觉得我应该能够冻结该值并将其存储在appsettings.dev
中,同意吗?
readonly MsSqlContainer _msSqlContainer
= new MsSqlBuilder().WithName("MockSqlDb")
.WithPortBinding(8081) // Cannot connect to localhost, 8080 🙁
.WithExposedPort(8082) // Cannot connect to localhost, 8081 🙁
.Build();
public Task InitializeAsync()
{
var launchContainerTask = _msSqlContainer.StartAsync();
launchContainerTask.Wait();
var cs = _msSqlContainer.GetConnectionString(); // TODO: freeze the port number 🤔?
using (SqlConnection connection = new SqlConnection(cs))
{
// setup database, table, and seed data 😎
}
return Task.CompletedTask;
}
public Task DisposeAsync() => _msSqlContainer.DisposeAsync().AsTask();
字符串
目前,我在调试过程中复制粘贴连接字符串(当然,我也可以在docker中看到它)。
1条答案
按热度按时间ki1q1bka1#
与依赖于固定端口不同,您应该将作为
GetConnectionString()
返回值的一部分的动态Map的随机端口注入到您的测试系统中。您可以在this best practices article中找到有关此背后原因的更多详细信息(其中有Java示例,但概念在不同语言中保持不变)。