19 septembre 2024

FluentDocker est une bibliothèque pour interagir avec docker-machine, docker-compose et docker. Il prend en charge le docker pour Windows, docker pour Mac, docker machine et Linux natif. Cette bibliothèque est disponible sur nuget Ductus.FluentDocker et la prise en charge du test ms est disponible sur Ductus.FluentDocker.MsTest.

La bibliothèque est divisée en trois couches:

  • Interactions Docker Binaries – Commandes statiques et environnement docker.
  • Services – couche de service mince pour gérer les machines, les conteneurs, etc.
  • Fluent API – API pour construire/découvrir des services à utiliser.

Voici quelques-unes des principales fonctionnalités de FluentDocker :

  • Gestion des conteneurs Docker : FluentDocker offre des méthodes pour créer, démarrer, arrêter et supprimer des conteneurs Docker de manière simple et rapide.
  • Gestion des images Docker : FluentDocker permet de télécharger, de construire et de publier des images Docker, ainsi que de gérer les tags et les référentiels d’images.
  • Gestion des réseaux Docker : FluentDocker offre des méthodes pour créer, configurer et gérer des réseaux Docker, ainsi que pour connecter des conteneurs à des réseaux.
  • Gestion des volumes Docker : FluentDocker permet de créer, de monter et de gérer des volumes Docker pour stocker les données des conteneurs.
  • Intégration avec les outils de test : FluentDocker peut être utilisé avec des outils de test tels que xUnit et NUnit pour automatiser les tests de logiciels utilisant Docker.

Monter un docker avec Redis dans des tests unitaires

Liens vers le code source

Ajouter un docker compose dans le projet

version: '3'
networks:
  app-tier:
    driver: bridge
services:
  redis:
    image: 'bitnami/redis:latest'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - REDIS_PORT_NUMBER=7000
    ports:
      - '7000:7000'
    networks:
      - app-tier

Ajouter un Class Fixture (Tests réalisés au moyen de xunit)

public class DockerFixture : IDisposable
{
    private ICompositeService? CompositeService { get; }
    public DockerFixture()
    {
        CompositeService = new Builder()
            .UseContainer()
            .UseCompose()
            .FromFile("./docker-compose.yml")
            .RemoveOrphans()
            .Build()
            .Start();
    }
    public void Dispose()
    {
        CompositeService?.Stop();
        CompositeService?.Remove(true);
    }
}

Classe de tests

public class TestWithFluentDocker : IClassFixture<DockerFixture>
{
    #region fields
    private static readonly ConnectionMultiplexer Redis =
        ConnectionMultiplexer.Connect(
        new ConfigurationOptions
        {
            EndPoints = {"localhost:7000"}
        });
    #endregion
    #region
    [Fact]
    public void TestRedis()
    {
        var db = Redis.GetDatabase();
        var pong = db.Ping();
        Assert.IsNotNull(db);
    }
    #endregion
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *