Как предотвратить операцию отката для каждого теста в базе данных TestNg + Spring + H2? - PullRequest
1 голос
/ 09 января 2020

Я использую пружинный интеграционный тест с базой данных h2 и testNg для интеграционных тестов. И мое весеннее загрузочное приложение использует данные весны jpa. Для каждого теста я не могу увидеть данные, сохраненные предыдущими тестами. Ниже приведен мой класс тестирования интеграции: -

import org.springframework.test.annotation.Rollback;
import org.testng.annotations.Test;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

@ActiveProfiles("test")
@SpringBootTest(classes = APP.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public class IntegrationTest extends AbstractTestNGSpringContextTests {

    @Test(priority = 1)
    @Rollback(false)
    private void m1() {
        // save data.        
    }

    @Test(priority = 1)
    @Rollback(false)
    private void m2() {        

        // retrieve saved data. (Failed)
    }

 }

Я использую TestRestTemplate для тестирования конечных точек PUT и POST Rest.

1 Ответ

1 голос
/ 09 января 2020

Вы используете аннотацию @SpringBootTest, что означает, что вы запустите все приложение весенней загрузки. @Commit и @Rollback должны использоваться с @DataJpaTest или чем-то подобным, когда ваш тест имеет значение @Transactional, чтобы иметь хороший контроль.

Вот что я думаю:

  • Либо есть проблема с TestNG и Spring, и в этом случае я мало что могу сделать
  • Или ваш код неисправен. Вы пытались использовать некоторые точки останова, чтобы увидеть, проходит ли ваш код все ваши уровни.

Не могли бы вы показать больше своего кода? Тестовый код, контроллер, сервис и уровень данных. И, конечно, ваши классы конфигурации, это было бы здорово, чтобы помочь


Вы должны использовать аннотацию @Commit, а не @Rollback

@ActiveProfiles("test")
@SpringBootTest(classes = APP.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public class IntegrationTest extends AbstractTestNGSpringContextTests {

    @Test
    @Commit
    private void m1() {
    }
 }

В качестве альтернативы, Вы можете использовать TransactionTemplate для более детального контроля. Смотрите это: Как принудительно зафиксировать транзакцию в тесте Spring Boot? .

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