gpt4 book ai didi

c# - 如何在开始 xUnit 测试之前启动 docker-compose 中指定的容器?

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:39 25 4
gpt4 key购买 nike

我需要运行一系列依赖于多个 Docker 容器的 xUnit 测试。我更希望 xUnit 负责整个过程 - 启动容器(类似于 docker-compose env up),运行测试然后撕裂容器(即 docker-compose env down >).

Visual Studio 或 xUnit 是否支持这个或这个过程需要手动实现?

最佳答案

要在没有任何额外依赖项的情况下执行此操作,您可以使用 Process.Start 来模拟通过命令行启动。这是包装并提供此功能的类:

public class DockerStarter : IDisposable
{
private const string DOCKER_COMPOSE = @"c:\Program Files\Docker\Docker\resources\bin\docker-compose.exe";
public string ComposeFile { get; set; }
public string WorkingDir { get; set; }

public DockerStarter(string composeFile, string workingDir)
{
ComposeFile = composeFile;
WorkingDir = workingDir;
}

public void Start()
{
var startInfo = generateInfo("up");
_dockerProcess = Process.Start(startInfo);
// TODO: Find better way to wait for Docker containers to start
Thread.Sleep(1000);
}

private Process _dockerProcess;

public void Dispose()
{
_dockerProcess.Close();

var stopInfo = generateInfo("down");
var stop = Process.Start(stopInfo);
stop.WaitForExit();
}

private ProcessStartInfo generateInfo(string argument)
{
var procInfo = new ProcessStartInfo
{
FileName = DOCKER_COMPOSE,
Arguments = $"-f {ComposeFile} {argument}",
WorkingDirectory = WorkingDir
};
return procInfo;
}
}

显然这种方法有缺点:

  • docker-compose 可执行文件的固定路径
  • 手动等待容器启动

我会看看是否有更好的方法直接与 Docker 守护进程交互并在可能的情况下更新答案。

关于c# - 如何在开始 xUnit 测试之前启动 docker-compose 中指定的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50821909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com