【问题标题】:How to use Embedded MongoDB in Spring Boot 2.2 integration tests?如何在 Spring Boot 2.2 集成测试中使用 Embedded MongoDB?
【发布时间】:2020-12-11 03:00:12
【问题描述】:

我想使用嵌入式 MongoDB 实例而不是连接到我的本地 MongoDB。

在集成测试中,我只使用 mockMvc。 我的测试课上的注释

@Profile("it")
@SpringBootTest
//@DataMongoTest - tried to do with that and can't run app because of missing Security beans.
@AutoConfigureMockMvc
@ExtendWith(SpringExtension.class)
public class ControllerIntegrationTest {
   @Autowired
   private WebApplicationContext context;

   @Autowired
   private MockMvc mockMvc;
...
}

MongoDB 配置

@Configuration
@EnableMongoRepositories
public class MongodbConfiguration {

   @Value("${mongo.db.url:mongodb://127.0.0.1}")
   private String MONGO_DB_URL;

   @Value(("${mongo.db.port:27017}"))
   private int MONGO_DB_PORT;

   @Value("${mongo.db.name:admin}")
   private String MONGO_DB_NAME;

   @Bean
   public MongoClient mongo() {
      return MongoClients.create(MONGO_DB_URL + ":" + MONGO_DB_PORT);
   }

   @Bean
   public MongoDbFactory mongoDbFactory(MongoClient mongoClient) {
      return new SimpleMongoClientDbFactory(mongoClient, MONGO_DB_NAME);
   }

   @Bean
   public WriteConcernResolver writeConcernResolver() {
      return action -> {
         System.out.println("Using Write Concern of MAJORITY");
         return WriteConcern.MAJORITY;
      };
   }

   @Bean
   public MongoCustomConversions customConversions(OffsetDateTimeReadConverter offsetDateTimeReadConverter,
         OffsetDateTimeWriteConverter offsetDateTimeWriteConverter) {
      return new MongoCustomConversions(asList(offsetDateTimeReadConverter, offsetDateTimeWriteConverter));
   }
}

我的 build.gradle 文件中有“de.flapdoodle.embed:de.flapdoodle.embed.mongo:2.2.0”:

    testImplementation "org.springframework.boot:spring-boot-starter-test"
    testImplementation "org.mockito:mockito-core:2.23.4"
    testImplementation "org.assertj:assertj-core:3.16.1"
    integrationTest "de.flapdoodle.embed:de.flapdoodle.embed.mongo:2.2.0"

我试图按照How to make the junit tests use the embedded mongoDB in a springboot application? 中的说明这样做,但是它是从 2018 年开始的,所以它可能已经过时了。

每当我运行测试时,它仍然会尝试连接到本地 MongoDB 实例,而不是运行嵌入式。

【问题讨论】:

    标签: java spring mongodb spring-boot integration-testing


    【解决方案1】:

    鉴于它是一个 IT,我建议您使用 MongoDB 容器来运行您的测试,它可以让您更准确地了解您的应用,并且可以与 CI/CD 管道集成。

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 2016-08-26
      • 2015-01-01
      • 2020-02-25
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2018-02-01
      • 2020-02-10
      相关资源
      最近更新 更多