我的 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
,它在每次测试之前都没有调用。为什么?