4
respostas

Erro no Teste de Consulta

O teste havia rodado com sucesso porém agora está dando erro.

Pode ajudar? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Olá! Tudo bem? O erro provavelmente está acontecendo porque os dados salvos nos testes passados continuam salvos no banco de dados, então quando você tenta criar um novo registro rodando o teste de novo um erro acontece, porque esse registro já foi criado quando você rodou o teste antes. Para resolver isso é ideal que você tenha uma base de dados exclusiva para testes que seja montada e desmontada cada vez que você roda os testes. O ideal é criar um novo application.properties exclusivo para testes, tendo o seguinte nome: application-test.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/voll_med_testes?useTimezone=true&serverTimezone=America/Sao_Paulo
spring.jpa.hibernate.ddl-auto=create-drop

As outras configurações serão herdadas do application.properties, você só precisará trocar a url de acordo com as configurações do seu ambiente local. A segunda linha coloca o ddl-auto do banco de dados como create-drop, fazendo com que o Spring crie e depois destrua a base de dados cada vez que o teste for rodado.


Existe outro problema que pode estar acontecendo, quando você cria registros com a mesma chave primária mais de uma vez em um único arquivo de teste esse mesmo problema pode continuar aparecendo, já que a base de dados dura até o final da execução dos testes, então dependendo de quantos testes você executa por vez esse problema pode acontecer. Para evitar isso, é importante usar dados diferentes em diferentes cenários de teste. Espero ter ajudado!

application-test.properties já foi criado. Porém, utilei o banco H2 ao invés de MySQL. O projeto está aqui: https://github.com/Tleofreitas/Api_Java_Alura.git

Alguém?

Olá! Tudo bem? Desculpe a demora! Fiz o download do seu projeto e coloquei as mudanças que tinha falado no post e deu tudo certo. Criei na mesma pasta do application.properties um novo arquivo chamado application-test.properties:

# application-test.properties

# construir e destruir a base de dados a cada execução 
spring.jpa.hibernate.ddl-auto=create-drop

# Base de dados diferente da API principal
spring.datasource.url=jdbc:h2:mem:vollmed_test
spring.datasource.username=sa
spring.datasource.password=

Outra coisa que percebi é que tinha uma anotação comentada na classe do teste:

@DataJpaTest // Testar Interface Repository
/* Para outros bancos (MySQL por exemplo)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) // Utilizar as informações do Banco real
@ActiveProfiles("test") // Usar o DataBase de Testes */
class MedicoRepositoryTest {
    ...
}

Só descomentei a linha, assim:

@DataJpaTest // Testar Interface Repository
/* Para outros bancos (MySQL por exemplo)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) // Utilizar as informações do Banco real */
@ActiveProfiles(profiles = {"test"}) // Usar o DataBase de Testes - Linha agora descomentada
class MedicoRepositoryTest {
    ...
}

Com essas alterações, o teste passou. Espero que dê certo dessa vez!