1
resposta

Erro na conexão dos testes de unidades com o Redis

Ao executar o teste "deve retornar codigo 200 quando chamar topicos com token" da classe "TopicoControllerTest", depois de realizar os passo a passo mostrado na aula, estava dando o seguinte erro:

java.lang.AssertionError: Range for response status value 500 expected:<SUCCESSFUL> but was:<SERVER_ERROR>
Expected :SUCCESSFUL
Actual   :SERVER_ERROR
<Click to see difference>

A solução que encontrei foi utilizar a classe RedisContainer (importada do test-containers-redis) e criar uma classe RedisConfig, configurando o funcionamento do Redis.

O meu código ficou da seguinte forma:

pom.xml:

...
    <dependencies>
        ...
        <dependency>
            <groupId>com.redis</groupId>
            <artifactId>testcontainers-redis</artifactId>
            <version>2.2.2</version>
            <scope>test</scope>
        </dependency>
        ...
    </dependencies>

RedisConfig.kt:

@Configuration
class RedisConfig {
    @Bean
    fun redisConnectionFactory(
        @Value("\${spring.redis.host}") host: String,
        @Value("\${spring.redis.port}") port: Int
    ): LettuceConnectionFactory {
        return LettuceConnectionFactory(RedisStandaloneConfiguration(host, port))
    }

    @Bean
    fun redisTemplate(factory: RedisConnectionFactory): StringRedisTemplate {
        return StringRedisTemplate(factory)
    }
}

DatabaseContainerConfiguration.kt:

abstract class DatabaseContainerConfiguration {
    companion object {
        ...
        @JvmField
        @Container
        @ClassRule
        val redisContainer = RedisContainer("redis:7.4.2").apply {
            withExposedPorts(6379)
            waitingFor(Wait.forListeningPort())
        }
1 resposta

Olá Henrique! Tudo bem?

A sua abordagem de usar a classe RedisContainer do testcontainers-redis e configurar o RedisConfig parece ser uma boa solução para garantir que o Redis esteja disponível durante a execução dos testes.

A configuração que você fez no pom.xml para adicionar a dependência do testcontainers-redis está correta. Além disso, a criação da classe RedisConfig para configurar a conexão com o Redis usando LettuceConnectionFactory e StringRedisTemplate parece estar bem implementada.

Bons estudos!