Ao escrever testes, por que alguém iria querer usar um banco de dados na memória apenas zombando dos dados?
Pude ver que os bancos de dados na memória podem ser benéficos para testar os repositórios de alguém. Mas se utilizando uma estrutura (como o Spring Data), testar os repositórios estaria testando a estrutura e não realmente a lógica do aplicativo.
A zombaria, no entanto, parece mais rápida e segue o mesmo padrão geralmente empregado ao escrever testes de unidade e TDD.
Então o que estou perdendo? Quando / por que um banco de dados na memória seria benéfico?
Na maioria das vezes, o teste de banco de dados na memória é mais simples do que zombar. Também é muito mais flexível. E também testa se os arquivos de migração são bem executados (quando há arquivos de migração).
Veja este pseudo-código:
O
InMemoryTest
não depende de comoDatabase
é implementado noUserRepository
trabalho. Ele simplesmente usa aUserRepository
interface pública (create
) e, em seguida, afirma contra ela. Esse teste não será interrompido se você alterar a implementação, mas for mais lento.Enquanto isso, ele
MockingDBTest
depende totalmente de comoDatabase
é implementadoUserRepository
. De fato, se você alterar a implementação, mas ainda fazê-la funcionar de outra maneira, esse teste será interrompido.O melhor dos dois mundos seria usar uma falsa implementação da
Database
interface:Isso é muito mais expressivo, mais fácil de ler e entender, e não depende da implementação do banco de dados real, feito nas camadas superiores do código.
fonte