Отмена @Sql после каждого теста - PullRequest
0 голосов
/ 19 мая 2018

У меня есть несколько тестов junit, где я хочу предварительно заполнить базу данных некоторыми данными, которые действительно имеют смысл для теста:

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class MyTest {


@Sql("test_insert.sql") 
@Test
public void testInsert(){
  ...performs some inserts...
}
@Sql("test_delete.sql") //makes inserts to the db so to delete them
@Test
public void testDelete(){
    ...
}

Я заметил, что junit выполняет тесты в обратном порядке, что означает, чтомой testDelete будет выполнен первым.

Кажется, что тестовая вставка не удалась для «ограничения на повторяющиеся строки», и это происходит потому, что сценарии test_delete.sql действительно добавляют эту строку.

Можно ли откатить операции, выполненные @Sql и самим тестом, чтобы один тест не влиял на другие?

1 Ответ

0 голосов
/ 19 мая 2018

Вам просто нужно добавить @ Transactional поверх тестового класса JUnit.Это вернет все изменения, внесенные в базу данных после каждого теста.

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
@Transactional           //  <-- @Transactional added
public class MyTest {


@Sql("test_insert.sql") 
@Test
public void testInsert(){
  ...performs some inserts...
}
@Sql("test_delete.sql") //makes inserts to the db so to delete them
@Test
public void testDelete(){
    ...
}
...