Teste de Integração Kotlin com Docker: Guia Completo

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

Teste de Integração Kotlin com Docker: do A ao Z

\n\n

No desenvolvimento moderno em Kotlin, o teste de integração com Docker tornou-se o padrão de fato. A conteinerização permite criar ambientes de teste isolados e reproduzíveis, que são o mais próximo possível do ambiente de produção. Neste artigo, abordaremos o processo completo de configuração e escrita de testes de integração para aplicações Kotlin usando Docker e a biblioteca Testcontainers.

\n\n

Por que o Docker é importante para o teste de integração Kotlin?

\n\n

Os testes de integração tradicionais frequentemente sofrem com problemas de ambiente: versões diferentes de bancos de dados, incompatibilidade de drivers, testes "instáveis" devido a processos em segundo plano. O Docker resolve esses problemas, fornecendo:

\n\n
    \n
  • Isolamento: cada teste é executado em um contêiner limpo
  • \n
  • Reprodutibilidade: mesmo ambiente em qualquer máquina
  • \n
  • Escalabilidade: capacidade de testar arquiteturas complexas de microsserviços
  • \n
  • Velocidade: inicialização e parada rápidas dos contêineres
  • \n
\n\n

Configuração do projeto Kotlin para testes de integração com Docker

\n\n

Para começar, adicionaremos as dependências necessárias no build.gradle.kts:

\n\n
dependencies {\n    // Testcontainers\n    testImplementation("org.testcontainers:testcontainers:1.19.3")\n    testImplementation("org.testcontainers:postgresql:1.19.3")\n    testImplementation("org.testcontainers:kafka:1.19.3")\n    testImplementation("org.testcontainers:junit-jupiter:1.19.3")\n    \n    // Banco de dados\n    testImplementation("org.postgresql:postgresql:42.7.1")\n    \n    // JUnit 5\n    testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")\n    \n    // Para aplicações Spring Boot\n    testImplementation("org.springframework.boot:spring-boot-starter-test:3.2.1")\n    testImplementation("org.springframework.boot:spring-boot-testcontainers:3.2.1")\n}
\n\n

Exemplo básico: teste com PostgreSQL

\n\n

Vamos considerar um exemplo simples - teste de um repositório que trabalha com PostgreSQL. Criaremos um teste de integração usando Testcontainers:

\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\nimport javax.sql.DataSource\n\n@Testcontainers\nclass UserRepositoryIntegrationTest {\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 find user`() {\n        val dataSource = createDataSource(postgres)\n        val repository = UserRepository(dataSource)\n        \n        val user = User(id = null, name = "João Silva", email = "joao@example.com")\n        val savedUser = repository.save(user)\n        \n        val foundUser = repository.findById(savedUser.id!!)\n        assert(foundUser != null)\n        assert(foundUser?.name == "João Silva")\n    }\n\n    private fun createDataSource(container: PostgreSQLContainer<*>): DataSource {\n        val config = HikariConfig().apply {\n            jdbcUrl = container.jdbcUrl\n            username = container.username\n            password = container.password\n            driverClassName = container.driverClassName\n        }\n        return HikariDataSource(config)\n    }\n}
\n\n

Teste de microsserviços com Kafka e Docker Compose

\n\n

Para cenários mais complexos, onde vários serviços são necessários, use o Docker Compose através do Testcontainers:

\n\n
import org.testcontainers.containers.DockerComposeContainer\nimport org.testcontainers.containers.wait.strategy.Wait\nimport java.io.File\n\nclass OrderService                

Blogs

Book Recommendations