如何在TestNg + Spring + H2数据库中防止每个测试的回滚操作?

问题描述 投票:0回答:1

我正在将Spring Boot集成测试与h2数据库和testNg一起用于集成测试。我的spring boot应用程序使用spring data 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端点。

spring-boot testng
1个回答
0
投票
我想的是:

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用于更细粒度的控件。参见:How to force transaction commit in Spring Boot test?

  • © www.soinside.com 2019 - 2024. All rights reserved.