Testes de Integração Kotlin com Docker: Nível Avançado

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Testes de Integração Kotlin com Docker: Nível Avançado

\n\n

Testes de integração são uma etapa crítica no desenvolvimento de microsserviços modernos em Kotlin. O uso do Docker permite criar ambientes isolados e reproduzíveis, o mais próximo possível da produção. Neste artigo, abordaremos técnicas avançadas de testes de integração de aplicações Kotlin com Docker, incluindo Testcontainers, otimização de desempenho e integração com CI/CD.

\n\n

1. Configuração do Testcontainers para um projeto Kotlin

\n\n

Testcontainers é uma biblioteca para JUnit que gerencia o ciclo de vida de contêineres Docker diretamente a partir dos testes. Para Kotlin, ela oferece extensões DSL convenientes.

\n\n

1.1. Adicionando dependências

\n\n

Adicione as seguintes dependências ao build.gradle.kts:

\n\n
testImplementation("org.testcontainers:testcontainers:1.19.3")\ntestImplementation("org.testcontainers:postgresql:1.19.3")\ntestImplementation("org.testcontainers:junit-jupiter:1.19.3")\ntestImplementation("org.jetbrains.kotlin:kotlin-test")
\n\n

1.2. Exemplo básico com PostgreSQL

\n\n

Considere um teste para um repositório que trabalha com PostgreSQL:

\n\n
import org.junit.jupiter.api.Test\nimport org.testcontainers.containers.PostgreSQLContainer\nimport org.testcontainers.junit.jupiter.Container\nimport org.testcontainers.junit.jupiter.Testcontainers\n\n@Testcontainers\nclass UserRepositoryTest {\n\n    companion object {\n        @Container\n        val postgres = PostgreSQLContainer<Nothing>("postgres:15-alpine").apply {\n            withDatabaseName("testdb")\n            withUsername("test")\n            withPassword("test")\n        }\n    }\n\n    @Test\n    fun `should save and retrieve user`() {\n        val dataSource = createDataSource(postgres.jdbcUrl, postgres.username, postgres.password)\n        val repository = UserRepository(dataSource)\n\n        val user = User(id = null, name = "Alice", email = "alice@example.com")\n        val saved = repository.save(user)\n\n        val found = repository.findById(saved.id!!)\n        assert(found?.name == "Alice")\n    }\n\n    private fun createDataSource(jdbcUrl: String, username: String, password: String): DataSource {\n        // HikariCP ou outro pool de conexões\n        return HikariDataSource(HikariConfig().apply {\n            this.jdbcUrl = jdbcUrl\n            this.username = username\n            this.password = password\n            driverClassName = "org.postgresql.Driver"\n        })\n    }\n}
\n\n

O Testcontainers inicia automaticamente o contêiner antes dos testes e o para após a conclusão. Isso garante a limpeza do ambiente de teste.

\n\n

2. Testando vários serviços com Docker Compose

\n\n

Em microsserviços reais, muitas vezes é necessária a interação com vários sistemas externos: bancos de dados, filas de mensagens, caches. Use DockerComposeContainer para levantar uma pilha completa.

\n\n

2.1. Configuração do Docker Compose

\n\n

Crie um arquivo docker-compose-test.yml:

\n\n
version: '3.8'\nservices:\n  postgres:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_DB: testdb\n      POSTGRES_USER: test\n      POSTGRES_PASSWORD: test\n  redis:\n    image: redis:7-alpine\n  rabbitmq:\n    image: rabbitmq:3-management-alpine
\n\n

2.2. Teste de integração com Docker Compose

\n\n

Exemplo de teste que verifica a interação do serviço com banco de dados, cache e fila:

\n\n
import org.junit.jupiter.api.Test\nimport org.testcontainers.containers.DockerComposeContainer\nimport org.testcontainers.junit.jupiter.Container\nimport org.testcontainers.junit.jupiter.Testcontainers\nimport java.io.File\n\n@Testcontainers\nclass OrderServiceIntegrationTest {\n\n    companion object {\n        @Container\n        val environment = DockerComposeContainer(\n            File("src/test/resources/docker-com                

Blogs

Book Recommendations