Minha pergunta é uma variação desta .
Visto que meu projeto de aplicativo Web Java requer muitos filtros / consultas de leitura e interfaces com ferramentas como GridFS, estou lutando para pensar em uma maneira sensata de empregar MongoDB da maneira que a solução acima sugere.
Portanto, estou pensando em executar uma instância incorporada do MongoDB junto com meus testes de integração. Eu gostaria que ele inicializasse automaticamente (para cada teste ou para todo o pacote), esvazie o banco de dados para cada teste e desligue no final. Esses testes podem ser executados em máquinas de desenvolvimento, bem como no servidor de CI, portanto, minha solução também precisará ser portátil .
Alguém com mais conhecimento no MongoDB pode me ajudar a ter uma ideia da viabilidade dessa abordagem e / ou talvez sugerir algum material de leitura que possa me ajudar a começar?
Também estou aberto a outras sugestões que as pessoas possam ter sobre como eu poderia abordar este problema ...
fonte
Respostas:
Aqui está uma versão atualizada (para 2019) da resposta aceita de @rozky (muitas mudanças foram alteradas nas bibliotecas Mongo e Embedded MongoDB).
fonte
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
junto com a alteração acimaEu encontrei a biblioteca Embedded MongoDB que parece bastante promissora e faz o que você pediu.
Atualmente suporta versões do MongoDB:
1.6.5
to3.1.6
, desde que os binários ainda estejam disponíveis no espelho configurado.Aqui está um pequeno exemplo de uso, que acabei de experimentar e funciona perfeitamente:
fonte
com.mongodb
API Java oficial, portanto, não é mais complicado do que usar a API regular.Existe o produto Foursquare Fongo . Fongo é uma implementação java em memória do mongo. Ele intercepta chamadas para o driver mongo-java-padrão para encontrar, atualizar, inserir, remover e outros métodos. O uso principal é para testes de unidade leves, nos quais você não deseja ativar um processo mongo.
fonte
Se você estiver usando o Maven, pode estar interessado em um plug-in que criei que envolve a API 'mongo incorporado' flapdoodle.de :
plugin-embedmongo-maven
Ele fornece uma
start
meta que você pode usar para iniciar qualquer versão do MongoDB que desejar (por exemplo, durantepre-integration-test
) e umastop
meta que irá parar o MongoDB (por exemplo, durantepost-integration-test
).O verdadeiro benefício de usar este plugin em relação a outros é que não há nenhum requisito para o MongoDB ser instalado de antemão. Os binários do MongoDB são baixados e armazenados
~/.embedmongo
para compilações futuras.fonte
Se você estiver usando sbt e specs2, escrevi o mesmo tipo de wrapper para embedmongo
https://github.com/athieriot/specs2-embedmongo
fonte
com spring-boot 1.3 você pode usar EmbeddedMongoAutoConfiguration
pom.xml
MongoConfig
fonte
Você pode executar o MongoDB na memória a partir da versão 3.2.6. Do site :
fonte
Não apenas para teste de unidade, mas também explicou como usar o mongodb de memória com api resto.
dependência maven:
========================================================== =============================
application.properties
========================================================== =============================
UserRepository.java
interface pública UserRepository extends MongoRepository {
}
para referência e todos os códigos java, use o link abaixo: (explicação passo a passo)
https://www.youtube.com/watch?v=2Tq2Q7EzhSA&t=7s
fonte
Os desempenhos são melhores ao executar
mongod
comstorageEngine='ephemeralForTest'
fonte
Na produção, você usará um banco de dados real.
Se você deseja que seus testes reflitam como seu produto se comporta na produção, use uma instância real do Mongo.
Uma implementação falsa pode não se comportar exatamente da mesma forma que uma real. Ao testar, você deve se esforçar para estar correto. A velocidade de execução vem em segundo lugar.
fonte