MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como fazer os testes junit usarem o mongoDB embutido em um aplicativo springboot?


Uma alternativa seria executar todo o aplicativo de inicialização de mola em teste. Nesse caso, seu aplicativo de inicialização de mola será descoberto automaticamente e o mongoDB incorporado será baixado e iniciado pelo Spring Boot
@RunWith(SpringRunner.class)
@SpringBootTest
public class YourSpringBootApplicationTests {

08:12:14.676 INFO EmbeddedMongo:42 - nota:noprealloc pode prejudicar o desempenho em muitos aplicativos =52299 08:12:22.005 INFO conexão:71 -Conexão aberta [connectionId{localValue:2, serverValue:2}] tolocalhost:52299

No caso do seu exemplo, você pode modificar o código para iniciar o Mongo incorporado em uma porta diferente:

  1. adicione o arquivo test/resources/test.properties para substituir as propriedades de application.properties
    mongo.db.name=person_testDB
    mongo.db.url=localhost
    mongo.db.port=12345
    

  2. modifique MongoDBConfig:adicione o campo MONGO_DB_PORT
    @EnableMongoRepositories
    public class MongoDBConfig {
        @Value("${mongo.db.url}")
        private String MONGO_DB_URL;
    
        @Value(("${mongo.db.port:27017}"))
        private int MONGO_DB_PORT;
    
        @Value("${mongo.db.name}")
        private String MONGO_DB_NAME;
    
        @Bean
        public MongoTemplate mongoTemplate() {
            MongoClient mongoClient = new MongoClient(MONGO_DB_URL, MONGO_DB_PORT);
            MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, MONGO_DB_NAME);
            return mongoTemplate;
        }
    }
    

  3. modifique a classe de teste:remova a anotação @DataMongoTest. Esta anotação força o início da instância do mongoDB incorporada
    static MongodExecutable mongodExecutable;
    
    @BeforeClass
    public static void setup() throws Exception {
        MongodStarter starter = MongodStarter.getDefaultInstance();
        String bindIp = "localhost";
        int port = 12345;
        IMongodConfig mongodConfig = new MongodConfigBuilder()
                .version(Version.Main.PRODUCTION)
                .net(new Net(bindIp, port, Network.localhostIsIPv6()))
                .build();
        mongodExecutable = null;
        try {
            mongodExecutable = starter.prepare(mongodConfig);
            mongodExecutable.start();
        } catch (Exception e){
            // log exception here
            if (mongodExecutable != null)
                mongodExecutable.stop();
        }
    }
    
    @AfterClass
    public static void teardown() throws Exception {
        if (mongodExecutable != null)
            mongodExecutable.stop();
    }
    

Mais uma maneira é usar o MongoRepository e iniciar o Mongo incorporado como parte da classe test @Configuration:está descrito aqui:Como você configura o MongDB incorporado para teste de integração em um aplicativo Spring Boot?