Então, estou desenvolvendo alguns serviços web RESTful Java orientados a banco de dados, usando Hibernate e MySQL. Para fins de teste, estou usando o banco de dados de memória H2. H2 é agradável e rápido, então isso funcionou muito bem. O único problema é que preencher as tabelas do banco de dados antes dos meus testes é meio entediante. Basicamente, crio e persisto à mão um monte de objetos. Estou me perguntando se talvez eu esteja seguindo o caminho errado.
Diga-me, quais são as melhores práticas para fazer o que estou tentando fazer? Alguma ferramenta que poderia me ajudar? Alguma estratégia ou dica geral?
Talvez você se beneficie da utilização de uma estrutura de simulação nos seus testes de unidade automatizados?
Há um número de diferentes para você escolher:
Mockito
JMock
EasyMock
PowerMock
fonte
Tudo o que você realmente pode fazer é persistir objetos manualmente ou ter um banco de dados pré-construído carregado. Você também precisa garantir que o banco de dados seja redefinido após cada teste.
Em um projeto em que estou trabalhando, sou novo no Hibernate, por isso tenho vários testes para relacionamento básico e operações em cascata. Usando TestNG, tenho uma
GenericHbTest
classe da qual todos os testes do Hibernate se estendem. Ele possui um@BeforeMethod
método que reexporta o esquema db e alguns métodos utilitários para gerar vários objetos DAO. Isso me permite personalizar um ambiente para cada teste.A única desvantagem de reexportar o esquema a cada teste é que leva muito tempo para concluir a execução dos testes. Mas eu só preciso ter certeza de que tudo está separado e limpo. Se você tem mais experiência com o Hibernate e tem um esquema mais estável, então a reexportação antes de cada teste provavelmente é desnecessária. Pelo menos, limpe todas as tabelas de antemão
fonte
Você já considerou a serialização de objetos? Este é o método mais rápido e fácil que eu usei.
Consiste em criar o estado desejado, serializá-lo em disco. Você usa esses arquivos para preencher o banco de dados na memória usado para seus testes.
Uma das vantagens é que você pode editar os arquivos manualmente posteriormente.
Como alternativa, se você estiver bem organizado em seus testes de unidade, poderá criar geradores de objetos. Quando os testes são iniciados, o banco de dados é instanciado e o esquema é exportado (usando o nHibernate). Objetos são gerados e preenchidos no banco de dados.
Este método tem uma vantagem sobre o primeiro: seus geradores de objetos evoluem com o seu código, para que você não precise se preocupar com seus arquivos, como na sugestão anterior.
fonte