我需要运行一系列依赖于多个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/

    10-12 22:02
    查看更多