My 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 и подсистемы автоматически воссоздают базу данных при каждом запуске веб-приложения. База данных воссоздается именно при запуске системы, пока она содержит данные после завершения приложения.
Я не понимал эти значения по умолчанию и ожидал, что это подходит для тестов.
Но когда я начал запускать тесты, я обнаружил, что база данных воссоздана только один раз. Поскольку тесты выполняются без предопределенного порядка, это вообще бессмысленно.
Итак, вопрос: как сделать какой-то смысл? I.e., как сделать базу данных воссозданной перед каждым тестом, как это происходит при первом запуске приложения?
Заголовок моего тестового класса:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = myapp.class)
//@WebAppConfiguration
@WebIntegrationTest
@DirtiesContext
public class WebControllersTest {
Как вы видите, я пробовал @DirtiesContext
на уровне класса, и это не помогло.
UPDATE
У меня есть bean
@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
. Почему?