Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Testes Integrados em CI/CD

Como funciona um teste integrado em uma pipeline onde existe uma etapa de testes a ser executada ? Sei que com testes unitários ela roda normalmente, agora, quando se tem um teste integrado com containers como ela funciona ?

1 resposta
solução!

Oi Renato! Tudo bem?

Testes integrados em uma pipeline CI/CD podem parecer um pouco complexos no início, mas são extremamente valiosos para garantir que sua aplicação funcione corretamente em diferentes ambientes. Vamos explorar como isso funciona, especialmente quando se utiliza containers.

  1. Como funcionam os testes integrados com containers em uma pipeline CI/CD?

    • Configuração dos Containers: Antes de mais nada, você precisa configurar os containers que serão utilizados para os testes. Isso inclui definir imagens de banco de dados, serviços de terceiros, etc. Em Kotlin, isso geralmente é feito utilizando bibliotecas como o Testcontainers.

    • Definição dos Testes: Assim como você faz com testes unitários, você precisa definir quais são os testes de integração. Esses testes geralmente verificam a interação entre diferentes partes da sua aplicação, como a comunicação com o banco de dados.

    • Execução na Pipeline: Na sua pipeline CI/CD, você terá uma etapa específica para a execução dos testes. Essa etapa geralmente é configurada em um arquivo YAML (como o Jenkinsfile, .gitlab-ci.yml, etc.). Durante essa etapa, os containers são iniciados, os testes são executados e, em seguida, os containers são destruídos.

  2. Detalhes Importantes

    • Containers Temporários: Os containers são criados apenas para a execução dos testes e são destruídos após a conclusão. Isso garante que o ambiente de teste seja limpo e isolado.
    • Migrações e Dados de Teste: Certifique-se de que seu container de banco de dados aplique todas as migrações necessárias e insira dados de teste antes de executar os testes.
    • Assertivas: Utilize bibliotecas como AssertJ para fazer assertivas robustas nos resultados dos seus testes.
  3. No Contexto do Kotlin

    Como você mencionou, você está utilizando o Spring com Kotlin. Aqui está um exemplo de como um teste de integração pode ser configurado:

    Teste de Integração:

    @SpringBootTest
    @Testcontainers
    class RelatorioIntegrationTest {
    
        @Container
        val mysql = MySQLContainer<Nothing>("mysql:5.7").apply {
            withDatabaseName("testdb")
            withUsername("user")
            withPassword("password")
        }
    
        @Autowired
        lateinit var topicoRepository: TopicoRepository
    
        @Test
        fun `deve gerar um relatorio`() {
            val topico = TopicoTest.build()
            topicoRepository.save(topico)
            val relatorio = topicoRepository.relatorio()
    
            assertThat(relatorio).isNotNull
            assertThat(relatorio.first()).isExactlyInstanceOf(TopicoPorCategoriaDto::class.java)
        }
    }
    

Os testes integrados em uma pipeline CI/CD com containers ajudam a garantir que sua aplicação funcione corretamente em um ambiente de produção simulado. Eles são essenciais para detectar problemas que não seriam encontrados com testes unitários.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.