Introducción a Testcontainers

Testing

Una de las tareas clave en el desarrollo de software es el testing.

Niveles de test

Según la pirámide de niveles de prueba de Mike Cohn; Hay 3 niveles principales:

  1. Prueba unitaria
  2. Prueba de Integración
  3. Prueba de interfaz de usuario

Pirámide de test

Figura 1. Pirámide de prueba. https://martinfowler.com/bliki/TestPyramid.html

Test de integración

Pruebas unitarias como base, y test de integración para verificar interacción con componentes externos fuera de la lógica de negocios.

Test containers

Testcontainers es una biblioteca Java que podemos usar para ejecutar diferentes frameworks de pruebas (como JUnit o Spock) con contenedores docker.

No solo Java

Hay implementaciones en Go, dotNet, Python, Node y Rust.

Módulos

  • Base de datos (SQL, NoSQL)
  • Nube (AWS vía localstack, Azure, GCloud)
  • Kafka, MockServer, Solr, Vault…
  • GenericContainers

Requisitos para una aplicación Java

@notaciones

  • @Testcontainers: esta anotación maneja automáticamente el ciclo de vida del contenedor.

  • @Container: marca los contenedores para ser administrados por la extensión de Testcontainers.

Demo

Conclusiones

  • El uso de contendores es bastante sencillo.

  • La opción withTmpFs que nos permite mapear el volumen del contenedor a nuestra memoria host.

  • Si queremos acelerar nuestras pruebas de integración, podemos declarar contenedores como campos estáticos para compartir entre pruebas. En nuestro caso, nuestra prueba se ejecutó en un promedio de 150 ms.

Conclusiones

  • Brinda el beneficio de una compatibilidad de base de datos del 100% (ya que ejecuta una base de datos real dentro de un contenedor).
  • La base de datos siempre se inicia en un estado conocido, sin contaminación entre ejecuciones de prueba.

Más información

Juan Moreno