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