Una de las tareas clave en el desarrollo de software es el testing.
Según la pirámide de niveles de prueba de Mike Cohn; Hay 3 niveles principales:
- Prueba unitaria
- Prueba de Integración
- Prueba de interfaz de usuario
https://martinfowler.com/bliki/TestPyramid.html
Pruebas unitarias como base, y test de integración para verificar interacción con componentes externos fuera de la lógica de negocios.
Testcontainers es una biblioteca Java que podemos usar para ejecutar diferentes frameworks de pruebas (como JUnit o Spock) con contenedores docker.
Hay implementaciones en Go, dotNet, Python, Node y Rust.
- Base de datos (SQL, NoSQL)
- Nube (AWS vía localstack, Azure, GCloud)
- Kafka, MockServer, Solr, Vault...
- GenericContainers
- Docker instalado
- junit-jupiter si usamos JUnit 5.
-
@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.
-
El uso de contendores es bastante sencillo.
-
La opción [
withTmpFs
](https://javadoc.io/static/org.testcontainers/testcontainers/1.15.0-rc2/org/testcontainers/containers/GenericContainer.html#withTmpFs-java.util.Map -) 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.
- 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.
- Blog: https://proitcsolution.com.ve
- Twitter: @JuanMorenoDev
- Enlace a presentación: https://bit.ly/testcontainers-intro
- Repositorio: https://github.com/JuanMorenoDeveloper/testcontainers-samples