Qual é a maneira apropriada de testar o código que usa consultas específicas do MySQL internamente?

Eu estou coletando dados e armazenei esses dados em um banco de dados MySQL usando Java. Além disso, uso o Maven para construir o projeto, o TestNG como uma estrutura de teste e o Spring-Jdbc para acessar o banco de dados. Eu implementei uma camada DAO que encapsula o acesso ao banco de dados. Além de adicionar dados usando as classes DAO, quero executar algumas consultas que agregam os dados e armazenam os resultados em algumas outras tabelas (como visualizações materializadas).

Agora, gostaria de escrever alguns testes que verificam se as classes DAO estão funcionando como deveriam. Portanto, pensei em usar um banco de dados na memória que será preenchido com alguns dados de teste. Como também estou usando consultas SQL específicas do MySQL para agregar dados, tive alguns problemas:

Em primeiro lugar, pensei em simplesmente usar a funcionalidade de banco de dados embutida fornecida pelo Spring-Jdbc para instanciar um banco de dados incorporado. Eu decidi usar a implementação H2. Lá eu tive problemas por causa das consultas de agregação, que estão usando conteúdo específico do MySQL (por exemplo, funções de manipulação de tempo como DATE ()). Outra desvantagem desta abordagem é que eu preciso manter dois arquivos ddl - o arquivo ddl real definindo as tabelas no MySQL (aqui eu defino a codificação e adiciono comentários a tabelas e colunas, ambos os recursos são específicos do MySQL); e o arquivo ddl de teste que define as mesmas tabelas, mas sem comentários, etc., pois H2 não suporta comentários.Eu encontrei uma descrição para usar o MySQL como um banco de dados embutido que eu posso usar dentro dos casos de teste (http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing.html) . Isso soou muito promissor para mim. Infelizmente, não funcionou: Ocorreu uma ocorrência de MissingResourceExcpetion "Recurso '5-0-21 / Linux-amd64 / mysqld' não encontrado". Parece que o driver não consegue encontrar o daemon do banco de dados na minha máquina local. Mas eu não sei o que tenho que procurar para encontrar uma solução para esse problema.

Agora, estou um pouco preso e estou imaginando se deveria ter criado a arquitetura de forma diferente. Alguém tem algumas dicas de como eu devo configurar um sistema apropriado? Eu tenho duas outras opções em mente:

Em vez de usar um banco de dados embutido, irei com uma instância nativa do MySQL e configurarei um banco de dados que é usado apenas para os testcases. Esta opção parece lenta. Na verdade, talvez eu queira configurar um servidor de IC mais tarde e achei que usar um banco de dados integrado seria mais apropriado, já que o teste seria executado mais rapidamente.Eu apago todas as coisas específicas do MySQL das consultas SQL e uso H2 como um banco de dados embutido para testes. Se essa opção for a escolha certa, precisarei encontrar outra maneira de testar as consultas SQL que agregam os dados em visualizações materializadas.Ou existe uma terceira opção que não tenho em mente?

Eu apreciaria todas as sugestões.

Obrigado, XComp

questionAnswers(2)

yourAnswerToTheQuestion