如何使用 SQL Server 数据库设置 dotnet Testcontainers 进行集成测试?

Eze*_*yen 7 c# asp.net integration-testing testcontainers .net-7.0

我有一个 API REST .NET 7,我想使用 sql server 容器数据库构建集成测试。我尝试遵循文档中的示例(https://dotnet.testcontainers.org/examples/aspnet/):

const string weatherForecastStorage = "weatherForecastStorage";

var mssqlConfiguration = new MsSqlTestcontainerConfiguration();
mssqlConfiguration.Password = Guid.NewGuid().ToString("D");
mssqlConfiguration.Database = Guid.NewGuid().ToString("D");

var connectionString = $"server={weatherForecastStorage};user id=sa;password={mssqlConfiguration.Password};database={mssqlConfiguration.Database}";

_weatherForecastNetwork = new NetworkBuilder()
 .WithName(Guid.NewGuid().ToString("D"))
 .Build();

_mssqlContainer = new ContainerBuilder<MsSqlTestcontainer>()
 .WithDatabase(mssqlConfiguration)
 .WithNetwork(_weatherForecastNetwork)
 .WithNetworkAliases(weatherForecastStorage)
 .Build();

Run Code Online (Sandbox Code Playgroud)

但 MsSqlTestcontainer 和 MsSqlTestcontainerConfiguration 类不存在。

nugget 包版本是 3.0.0,但官方文档似乎已经过时,因为构造函数 ContainerBuilder<> 也已过时。

我正在寻找的是创建一个带有 SQL SERVER 映像的容器,然后创建一个数据库/表并将其与实体框架核心一起使用(我不知道如何创建它们,甚至不知道这是否有必要)。

另一方面,我尝试了这样的事情:


       private readonly IContainer _dbContainer = new ContainerBuilder()
               .WithImage("mcr.microsoft.com/mssql/server")
               .WithEnvironment("MSSQL_SA_PASSWORD", "MyStrongPassword")
               .WithEnvironment("ACCEPT_EULA", "Y")
               .WithEnvironment("MSSQL_DATA_DIR", "/var/opt/sqlserver/data")
               .WithEnvironment("MSSQL_LOG_DIR", "/var/opt/sqlserver/log")
               .WithEnvironment("MSSQL_BACKUP_DIR", "/var/opt/sqlserver/backup")
               .WithPortBinding(49401, 1433)
               .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(1433).UntilCommandIsCompleted("/bin/bash", "/opt/mssql-tools/bin/sqlcmd  -S 127.0.0.1,1433 -U sa -P MyStrongPassword -d master -Q\"CREATE DATABASE Local_test"))
               //.WithBindMount(Path.GetFullPath("sql"), "/scripts/")
               //.WithCommand()
               .Build();
Run Code Online (Sandbox Code Playgroud)

但这不起作用(错误:Docker.DotNet.DockerApiException:Docker API响应状态代码=冲突,响应={“message”:“Container 63d8dbd9c73f924b54ecddea5febc82589ccea452a3543eebb2aa3aa8b6bc408未运行”})。

And*_*ter 10

但 MsSqlTestcontainer 和 MsSqlTestcontainerConfiguration 类不存在。

我确信这个问题属于这个GitHub 讨论。正如那里提到的,该示例不再准确(我将更新它)。该示例又是最新的。我分享了一个工作示例,其中包括基于 Microsoft 文章ASP.NET Core 中的集成测试 的指南。两者都涵盖 ASP.NET,包括。EF。

我正在寻找的是创建一个带有 SQL SERVER 映像的容器,然后创建一个数据库/表并将其与实体框架核心一起使用(我不知道如何创建它们,甚至不知道这是否有必要)。

模块是独立的 NuGet 依赖项。要运行 Microsoft SQL Server 容器,请将 NuGet 依赖项添加到您的测试项目:

dotnet add package Testcontainers.MsSql --version 3.0.0
Run Code Online (Sandbox Code Playgroud)

模块已预先配置并遵循最佳实践。无需覆盖默认配置。创建和启动容器只需要这两行:

dotnet add package Testcontainers.MsSql --version 3.0.0
Run Code Online (Sandbox Code Playgroud)

请注意,Microsoft SQL Server Docker 映像与 ARM 设备不兼容,例如采用 Apple Silicon 的 Mac。相反,请使用 SqlEdge 模块基于 ARM64 架构的 Azure SQL Edge 已退役