MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да накарам junit тестовете да използват вградения mongoDB в приложение за springboot?

Алтернатива би била да стартирате цялото приложение за пружинно зареждане в тест. В този случай вашето приложение за пролетно зареждане ще бъде открито автоматично и вграденият mongoDB ще бъде изтеглен и стартиран от Spring Boot

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

08:12:14.676 ИНФОРМАЦИЯ EmbeddedMongo:42 - забележка:noprealloc може да навреди на производителността в много приложения 08:12:14.694 ИНФОРМАЦИЯ EmbeddedMongo:42 -2017-12-31T08:12:14.693 I2stenting+020db 020dp [46tangod pip] =52299 08:12:22.005 INFO връзка:71 -Отворена връзка [connectionId{localValue:2, serverValue:2}] tolocalhost:52299

В случай на вашия пример можете да промените кода, за да стартирате вграден Mongo на различен порт:

  1. добавете файл test/resoures/test.properties, за да замените свойствата от application.properties

    mongo.db.name=person_testDB
    mongo.db.url=localhost
    mongo.db.port=12345
    
  2. модифицира MongoDBConfig:добавете поле 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. модифициран тестов клас:премахване на анотацията @DataMongoTest. Тази анотация принуждава стартирането на вградения 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();
    }
    

Още един начин е да използвате MongoRepository и init embedded Mongo като част от тестов клас @Configuration:това е очертано тук:Как да конфигурирате Embedded MongDB за тестване на интеграция в приложение Spring Boot?




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Разгръщане на комплекти реплики на MongoDB в региони на AWS

  2. MongoDB + nodejs:как да потърся заявка за полетата на ISODate?

  3. Внедряване на пагинация в mongodb

  4. Преобразуване на mongodb Binary _id в LUUID с помощта на възел

  5. Разбиране на опциите за архивиране на MongoDB