MongoDB的Spring DirtiesContext

时间:2017-03-26 12:38:22

标签: spring spring-boot spring-data spring-mongo spring-mongodb

我正在为Spring-Data JPA和Spring-Data-Mongo存储库创建JUnit测试(每个类只包含一个存储库的测试)。要在执行每个测试之前清理数据库,我使用的是DirtiesContext:

@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)

对于JPA(Postgres或H2 DB),它工作正常,因此对于每个测试,我得到一个干净的数据库。但它对MongoDB无法正常工作 - 在每次测试之前都不会重新创建数据库。我知道我可以使用:

    @Autowired
    private MongoTemplate mongoTemplate;

    @After
    public void clearCollection() {
        mongoTemplate.dropCollection(DocHeader.class);
    }

但我想了解为什么它适用于Postgres或H2但不适用于Mongo。

1 个答案:

答案 0 :(得分:0)

默认情况下,Spring测试基础架构会在使用相同配置时重新使用为测试创建的应用程序上下文。

@DirtiesContext将应用程序上下文标记为脏,即以某种方式通过测试更改(或者在您的情况下是先前的测试),因此创建了新的应用程序上下文。

这将包括为数据库创建新的DataSource

使用H2内存数据库,创建新的DataSource(之前删除旧版本)将实际删除数据库并创建一个新数据库。可以通过JDBC-URL参数配置此行为。有关详细信息,请参阅http://www.h2database.com/html/features.html#embedded_databases

使用普通数据库删除并重新创建Connection s / DataSource对数据库不执行任何操作,您的数据和架构将保持不变。