【发布时间】:2016-04-09 14:24:43
【问题描述】:
我的 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,它并没有在每次测试之前调用。为什么?
【问题讨论】:
-
这是自定义逻辑。 Spring 对您的数据库一无所知。写一个
@Before和@After来设置和清理。 -
@SotiriosDelimanolis 我知道这很短,但你的评论不应该是一个答案吗?
标签: java spring spring-mvc spring-boot spring-test