sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan får man junit-testene til at bruge den indlejrede mongoDB i en springboot-applikation?

Et alternativ ville være at køre hele spring boot-applikationen i test. I dette tilfælde vil din spring boot-applikation blive opdaget automatisk, og indlejret mongoDB vil blive downloadet og startet af Spring Boot

@RunWith(SpringRunner.class)
@SpringBootTest
public class YourSpringBootApplicationTests {

08:12:14.676 INFO EmbeddedMongo:42 - bemærk:noprealloc kan skade ydeevnen i mange applikationer 08:12:14.694 INFO EmbeddedMongo:42 -2017-12-31T08:12:14.693]+0200it port I 4 2000. =52299 08:12:22.005 INFO forbindelse:71 -Åbnet forbindelse [connectionId{localValue:2, serverValue:2}] tolocalhost:52299

I tilfælde af dit eksempel kan du ændre koden for at starte indlejret Mongo på en anden port:

  1. tilføj fil test/resoures/test.properties for at tilsidesætte egenskaber fra application.properties

    mongo.db.name=person_testDB
    mongo.db.url=localhost
    mongo.db.port=12345
    
  2. modificer MongoDBConfig:tilføj MONGO_DB_PORT-feltet

    @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. modificer testklasse:fjern @DataMongoTest-annotering. Denne annotation tvinger til at starte indlejret mongoDB-instans

    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();
    }
    

En anden måde er at bruge MongoRepository og indsætte indlejret Mongo som en del af test @Configuration-klassen:det er beskrevet her:Hvordan konfigurerer du Embedded MongDB til integrationstest i en Spring Boot-applikation?




  1. Sammenligning af fortegnet 64 bit nummer ved hjælp af 32 bit bitvise operationer i Lua

  2. MongoDB VÆLG ANTALGRUPPE EFTER

  3. spring-boot redis :Hvordan ugyldiggøres alle sessioner for en bruger?

  4. mongoDB array paginering