Introduction Testcontainers

De Reservoircode
Aller à : navigation, rechercher

But

Permettre de lancer dans un contexte de test d'intégration, des conteneurs Docker exposant des services nécessaires aux tests.

Intégration dans Geoentity

Le seul prérequis étant d'avoir Docker d'installer !

Ajout de la dépendance par le biais du POM Maven.

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.7.3</version>
</dependency>

Mise en ouvre pour MongoDB dans les test IT

L'idée est de remplacer une solution vieillissante qui lance un MongoDB local pour utiliser Testcontainers.

Il existe plusieurs type d'add-on dans Testcontainers, qui prennent en charge finement des produits comme par exemple : testcontainers-java-module-mssqlserver, testcontainers-java-module-mariadb...

Dans le cas ou il n'existe pas de module existant, on peut utiliser GenericContainer, comme montré ci-dessous.

@Slf4j
public class MongoTestModule extends AbstractModule {
    private static final GenericContainer mongodb;
    private final Class<?> testClass;
    private final Integer port;

    static {
        mongodb = new GenericContainer("mongo:3.2").withExposedPorts(27017);
        mongodb.start();
    }

    public MongoTestModule(Class<?> testClass) {
        this.testClass = testClass;
        port = mongodb.getFirstMappedPort();
    }
...

Conclusion

Un des intérêts est de pouvoir utiliser au niveau du test d'intégration, un service identique à la production. En effet, l'image Docker utilisée pour le IT est la même que l'image Docker cible dans un cluster par exemple.

Pour la suite, on peut envisager :