我正在将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端点。
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?。