sql >> データベース >  >> NoSQL >> MongoDB

junitテストでspringbootアプリケーションに埋め込まれたmongoDBを使用する方法は?

    別の方法は、テストでスプリングブートアプリケーション全体を実行することです。この場合、Spring Bootアプリケーションは自動的に検出され、埋め込まれたmongoDBがダウンロードされてSpringBootによって開始されます

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

    08:12:14.676 INFO EmbeddedMongo:42-注:nopreallocは多くのアプリケーションでパフォーマンスを低下させる可能性があります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 -Opened connection [connectionId {localValue:2、serverValue:2}] tolocalhost:52299

    あなたの例の場合、別のポートで埋め込みMongoを開始するためにコードを変更することができます:

    1. application.propertiesのプロパティを上書きするには、test / resources/test.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();
      }
      

    もう1つの方法は、MongoRepositoryとinit Embedded Mongoをテスト@Configurationクラスの一部として使用することです。ここで概説します:SpringBootアプリケーションでの統合テスト用にEmbeddedMongDBをどのように構成しますか?




    1. ノード8でnode-redisを使用するutil.promisify

    2. Redisのフィルタリング要素

    3. GridFSを使用してNode.jsとMongooseを使用して画像を保存する方法

    4. MongoDBをサービスとして起動できません