Pessoal, tenho o banco H2 rodando em memória para os testes unitários e agora surgiu a necessidade de excluir e incluir colunas em uma tabela deste banco, como proceder?
Como peguei o projeto andando e a pessoa que montou o projeto saiu do país preciso entender como fazer este procedimento.
Até onde entendo, teste unitário só testa a menor unidade testável possível, ou seja, uma única classe. Se esse teste depender de qualquer outro recurso externo, não “mockável”, é um teste integrado. Mas, isso é meu entendimento.
O banco de dados que você usa no sistema é h2? Se não, qual a assertividade em usar um banco que não é o mesmo de produção?
Bom, o h2 também permite que você utilize de scripts DML. Já tentou um
Este projeto já existe, apenas precisei fazer uma alteração.
Falando em testes, muitos projetos utilizam o banco H2 em memória, ou seja, ele não é físico, é volátil e tem a necessidade de deixar a execução do teste mais rápido sem a necessidade de escrever fisicamente no disco os dados do teste, enfim, não preciso no momento remover ou alterar esta premissa deste projeto.
Como o banco é em memória, minha dúvida é onde acessa-lo para alterar a tabela, sei que o H2 suporta scritps DML, mas como funciona neste caso em específico? Saca?
Entendi e mantenho tudo o que disse anteriormente. Se não é o mesmo banco, se não é o mesmo SO, se não é a mesma infra, significa que o teste não está considerando as condições ideais e é falho. Enfim, conceitos.
Acho que você que não saca, mas, se você tivesse feito a lição de casa e pesquisado no google, teria encontrado uma série de tutoriais que, basicamente, pedem para executar o jar do h2, com a aplicação parada, para que um ambiente web de interação com este banco se torne acessível. Exemplo
Cara, por favor, baixa a bola, vai na comunidade de testes e estude sobre o conceito de banco em memória aplicado a testes antes de ficar distorcendo as coisas.
E outra, procurei no Google, mas COMO VOCÊ NÃO ENTENDEU acabou saindo de lado.
Não sei como está a estrutura do seu projeto, em projetos que já trabalhei utilizavamos o Flyway para realizar o versionamento da base de dados, inclusive da base de testes H2, é muito simples e rápido.
Com isso todo script de manipulação real também era replicado na base de testes, mas pelo que me parece no seu caso seria um serviço meio braçal, mas nunca precisei fazer tal façanha na mão.
@pyro, o que o @darlan_machado quis dizer é que testes unitários não realizam integração com quaisquer coisa por testar uma pequena unidade do sistema.
Acredito que os testes que vc está querendo dizer é testes de integração que utilizam o banco H2 (que é o que já usei aqui no meu trabalho inclusive).
Sobre a questão, a alteração nessa estrutura do banco H2 vai depender da forma como ele está sendo configurado, pois a estrutura desse banco eh, geralmente, criado no momento em que os testes irão rodar.
No caso em que usei uma estrutura assim, a aplicação era com Spring e o banco de dados era versionado com o flyway. Com isso, havia scripts responsaveis por criar o schema do banco no H2.
Como é sua aplicação? Quais frameworks esse sistema usa?