Realizando os testes diretamente com o uso de banco de dados em disco podemos ter dois problemas:
- Teste demorar para executar, pois de fato precisa executar uma query em um banco de dados real.
- De certa forma se torna um teste de integração, pois se o servidor de banco de dados estiver fora do ar, não conseguiremos realizar os testes.
Devido a isso, além da solução mencionada de se utilizar um banco em memória, que evita os dois problemas mencionados acima (mas pode causar uma incompatibilidade), haveria uma terceira alternativa?
Como por exemplo, utilizar um mock do repositório e quando algum método que executa uma query personalizada for chamado, passamos no Mock os parâmetros com as condições para executar o teste. Exemplo: Criamos uma nova lista com entidades JPA Medico, da mesma forma uma lista de pacientes, consulta, etc. Então quando for executada a query, em vez de a pesquisa ser realizada em tabelas físicas, seria realizada no mock dessas tabelas (nesse caso, as listas).
Esse foi só um exemplo hipotético para tentar explicar a minha dúvida, e não sei se faz sentido, talvez por baixo dos panos seja isso que um in-memory database faça, mas pelo que entendi, ele usa uma síntaxe específica que pode ser incompatível com as queries do mysql.