Как вызвать контейнеры, указанные в docker-compose, перед запуском тестов xUnit? - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно запустить серию тестов xUnit, которые зависят от нескольких контейнеров Docker.Я бы предпочел, чтобы xUnit позаботился обо всем процессе - начиная контейнеры (аналогично docker-compose env up), выполняя тесты, а затем разрывая контейнеры (т.е. docker-compose env down).

Есть ли поддержка в Visual Studio или xUnit дляэтот или этот процесс нужно внедрять вручную?

1 Ответ

0 голосов
/ 13 июня 2018

Чтобы сделать это без каких-либо дополнительных зависимостей, вы можете использовать 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 и по возможности обновить ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...