8

我用的是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.

4

3 回答 3

10

这是意料之中的:Spring TestContext 框架从不支持嵌套测试类的“继承”。

因此,您的“解决方法”实际上是此时实现目标的正确方法。

但是请注意,我可能会结合SPR-15366添加对嵌套测试类的“伪继承”的支持。

问候,

Sam(Spring TestContext 框架的作者

于 2017-05-28T12:11:13.690 回答
3

我通过以下方式解决了它..

@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() {
        }   
    }
}
于 2017-05-26T14:32:10.490 回答
0

我通过以下方式解决了它

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());
    }
}

于 2021-11-24T12:34:52.460 回答