如何在Spring进行每次测试之前重新创建数据库?

我的Spring-Boot-Mvc-Web应用程序在application.properties文件中具有以下数据库配置:

spring.datasource.url=jdbc:h2:tcp://localhost/~/pdk

spring.datasource.username=sa

spring.datasource.password=

spring.datasource.driver-class-name=org.h2.Driver

这是我所做的唯一配置。我在任何地方都没有进行任何其他配置。尽管如此,Spring和子系统会在每次运行Web应用程序时自动重新创建数据库。即在系统运行时重新创建数据库,而在应用程序结束后它包含数据。

我不了解此默认值,并期望它适合测试。

但是,当我开始运行测试时,我发现数据库仅重建一次。由于没有按预定义的顺序执行测试,因此这根本没有意义。

所以,问题是: 如何变得有意义? 即如何在应用程序首次启动时进行每次测试之前重新创建数据库?

我的测试类标题如下:

@RunWith(SpringJUnit4ClassRunner.class)

@SpringApplicationConfiguration(classes = myapp.class)

//@WebAppConfiguration

@WebIntegrationTest

@DirtiesContext

public class WebControllersTest {

如您所见,我@DirtiesContext在课堂上尝试过,但没有帮助。

我有一个豆

@Service

public class DatabaseService implements InitializingBean {

有一个方法

@Override

@Transactional()

public void afterPropertiesSet() throws Exception {

log.info("Bootstrapping data...");

User user = createRootUser();

if(populateDemo) {

populateDemos();

}

log.info("...Bootstrapping completed");

}

现在,我使用它populateDemos()来清除数据库中的所有数据。不幸的是,尽管,它没有在每次测试前调用@DirtiesContext。为什么?

回答:

实际上,我认为您需要这样做:

@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)

http://docs.spring.io/autorepo/docs/spring-framework/4.2.6.RELEASE/javadoc-

api/org/springframework/test/annotation/DirtiesContext.html

@DirtiesContext可以用作同一类中的类级别和方法级别的注释。在这种情况下,在使用任何带注释的方法之后以及在整个类之后,ApplicationContext将被标记为脏。如果DirtiesContext.ClassMode设置为AFTER_EACH_TEST_METHOD,则将在类中的每个测试方法之后将上下文标记为脏。

以上是 如何在Spring进行每次测试之前重新创建数据库? 的全部内容, 来源链接: utcz.com/qa/399431.html

回到顶部