MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak sprawić, by testy junitowe wykorzystywały osadzone mongoDB w aplikacji springboot?

Alternatywą byłoby uruchomienie całej aplikacji Spring Boot w teście. W takim przypadku aplikacja Spring Boot zostanie wykryta automatycznie, a osadzona baza danych mongoDB zostanie pobrana i uruchomiona przez Spring Boot

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

08:12:14.676 INFO EmbeddedMongo:42 - uwaga:noprealloc może obniżyć wydajność w wielu aplikacjach 08:12:14.694 INFO EmbeddedMongo:42 -2017-12-31T08:12:14.693+0200 I CONTROL [initandlisten] MongoDBstarting :pid=2246 port =52299 08:12:22.005 INFO connection:71 -Otwarte połączenie [connectionId{localValue:2, serverValue:2}] tolocalhost:52299

W przypadku twojego przykładu możesz zmodyfikować kod, aby uruchomić osadzone Mongo na innym porcie:

  1. dodaj plik test/resoures/test.properties, aby nadpisać właściwości z application.properties

    mongo.db.name=person_testDB
    mongo.db.url=localhost
    mongo.db.port=12345
    
  2. zmodyfikuj MongoDBConfig:dodaj pole 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. zmodyfikuj klasę testową:usuń adnotację @DataMongoTest. Ta adnotacja wymusza uruchomienie osadzonej instancji mongoDB

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

Jeszcze jeden sposób to użycie MongoRepository i init osadzonego Mongo jako części testowej klasy @Configuration:jest to opisane tutaj:Jak skonfigurować Embedded MongDB do testowania integracji w aplikacji Spring Boot?




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kolekcja zamków Mongodb do momentu ustawienia flagi?

  2. Czy GridFS jest wystarczająco szybki i niezawodny do produkcji?

  3. Suma zagregowana MongoDB dla każdego klucza w poddokumencie

  4. MongoDB $lt Operator potoku agregacji

  5. 7 sposobów liczenia dokumentów w MongoDB