事务回滚在 JUnit5 的@Nested class 中的测试用例中不起作用
Transaction roll back is not working in test case in @Nested class of JUnit5
我用的是spring-boot, JUnit5, Mybatis.
@SpringJUnitJupiterConfig(classes = {RepositoryTestConfig.class})
@MapperScan
@Rollback
@Transactional
public class TestClass {
@Autowired
private TestMapper testMapper;
@BeforeEach
void init() {
User user = new User();
testMapper.insert(user);
}
@Test
public void test1() {
// (1) success rollback
}
@Nested
class WhenExistData {
@Test
public void test2() {
// (2) rollback not working
}
}
}
(1) 正在回滚。并输出如下日志。
2017-05-26 22:21:29 [INFO ](TransactionContext.java:136) Rolled back transaction for test context ...
但是,(2) 不起作用。我希望能够回滚到 @Nested
.
我是按照下面的方法解决的..
@SpringJUnitJupiterConfig(classes = {RepositoryTestConfig.class})
@MapperScan
@Rollback
@Transactional
public class TestClass {
@Autowired
private TestMapper testMapper;
@BeforeEach
void init() {
User user = new User();
testMapper.insert(user);
}
@Nested
@SpringJUnitJupiterConfig(classes = {RepositoryTestConfig.class})
@MapperScan
@Rollback
@Transactional
class WhenExistData {
@Test
public void test2() {
}
}
}
这是意料之中的:Spring TestContext Framework 从未支持 "inheritance" 嵌套测试 类。
因此,您的 "work around" 实际上是目前实现目标的正确方法。
但是请注意,我可能会为 nested 测试 类 和 SPR-15366 添加对 "pseudo-inheritance" 的支持。
此致,
Sam(Spring TestContext Framework 的作者)
我是通过以下方式解决的
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
// JUnit5
@SpringBootTest
public class TestClass {
@Resource
private TestMapper testMapper;
@Test
@Rollback
@Transactional
public void createByTimerId() {
Assertions.assertEquals(1, testMapper.insert());
}
}
我用的是spring-boot, JUnit5, Mybatis.
@SpringJUnitJupiterConfig(classes = {RepositoryTestConfig.class})
@MapperScan
@Rollback
@Transactional
public class TestClass {
@Autowired
private TestMapper testMapper;
@BeforeEach
void init() {
User user = new User();
testMapper.insert(user);
}
@Test
public void test1() {
// (1) success rollback
}
@Nested
class WhenExistData {
@Test
public void test2() {
// (2) rollback not working
}
}
}
(1) 正在回滚。并输出如下日志。
2017-05-26 22:21:29 [INFO ](TransactionContext.java:136) Rolled back transaction for test context ...
但是,(2) 不起作用。我希望能够回滚到 @Nested
.
我是按照下面的方法解决的..
@SpringJUnitJupiterConfig(classes = {RepositoryTestConfig.class})
@MapperScan
@Rollback
@Transactional
public class TestClass {
@Autowired
private TestMapper testMapper;
@BeforeEach
void init() {
User user = new User();
testMapper.insert(user);
}
@Nested
@SpringJUnitJupiterConfig(classes = {RepositoryTestConfig.class})
@MapperScan
@Rollback
@Transactional
class WhenExistData {
@Test
public void test2() {
}
}
}
这是意料之中的:Spring TestContext Framework 从未支持 "inheritance" 嵌套测试 类。
因此,您的 "work around" 实际上是目前实现目标的正确方法。
但是请注意,我可能会为 nested 测试 类 和 SPR-15366 添加对 "pseudo-inheritance" 的支持。
此致,
Sam(Spring TestContext Framework 的作者)
我是通过以下方式解决的
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
// JUnit5
@SpringBootTest
public class TestClass {
@Resource
private TestMapper testMapper;
@Test
@Rollback
@Transactional
public void createByTimerId() {
Assertions.assertEquals(1, testMapper.insert());
}
}