Как заново создать базу данных перед каждым тестом в 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 и подсистемы автоматически воссоздают базу данных при каждом запуске веб-приложения. База данных воссоздается именно при запуске системы, в то время как она содержит данные после завершения приложения.
Я не понимал эти значения по умолчанию и ожидал, что это подходит для испытаний.
Но когда я начал выполнять тесты, я обнаружил, что база данных воссоздается только один раз. Поскольку тесты выполняются не в заранее заданном порядке, это вообще бессмысленно.
Итак, вопрос в следующем:как иметь смысл? То есть как заставить базу данных воссоздавать перед каждым тестом, как это происходит при первом запуске приложения?
Мой заголовок тестового класса выглядит следующим образом:
@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
, Зачем?