O teste havia rodado com sucesso porém agora está dando erro.
Pode ajudar?
O teste havia rodado com sucesso porém agora está dando erro.
Pode ajudar?
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!