Spring H2 Test DB не сбрасывается перед каждым тестом - PullRequest
0 голосов
/ 26 июня 2018

РЕДАКТИРОВАТЬ: Как предложил С. Вебер в комментариях, решение состоит в том, чтобы добавить @Transactional к классу тестов.

У меня есть несколько тестов, которые используют H2 в памятиDB.Мне нужно сбросить БД перед каждым тестом.Хотя мои сценарии SQL запускаются при каждом выполнении теста, БД не сбрасывается должным образом, что приводит к отсутствию необходимой записи после теста удаления.

Класс теста:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureTestDatabase(replace=Replace.ANY, connection=EmbeddedDatabaseConnection.H2)
public class RepositoryTests {

    @Autowired
    private Repository repository;

    @Autowired
    private DataSource dataSource;

    @Before
    public void populateDb() {
        Resource initSchema = new ClassPathResource("database/schema.sql");
        Resource initData = new ClassPathResource("database/data.sql");
        DatabasePopulator dbPopulator = new ResourceDatabasePopulator(initSchema, initData);
        DatabasePopulatorUtils.execute(dbPopulator, dataSource);
    }

    @Test
    public void testMethod1() {
        // ...
        repository.delete("testdata");
    }

    @Test
    public void testMethod2() {
        // ...
        Object test = repository.get("testdata");
        // is null but should be an instance
    }
}

схема.sql удаляет все таблицы перед их воссозданием.data.sql вставляет все необходимые тестовые данные в БД.

Выполнение одного testMethod2 успешно.Однако выполнение всех тестов приводит к сбою теста с NullPointerException.

Я успешно попытался использовать @DirtiesContext, однако это не вариант, потому что я не могу позволить себе 20-секундный запуск длякаждый 0,1-секундный тест.

Есть ли другое решение?

1 Ответ

0 голосов
/ 26 июня 2018

Spring Test Framework предоставляет механизм для поведения, которое вы хотите для ваших тестов.Просто аннотируйте свой класс Test с помощью @Transactional, чтобы получить поведение отката по умолчанию для каждого метода тестирования.

Существуют способы настройки транзакционного поведения тестов, а также некоторые подводные камни (например, использование RestTemplate внутри метода test), о которых вы можете прочитать подробнее в соответствующей главе руководства Spring.

Spring Test Framework

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...