事务回滚在JUnit5的@Nested类中的测试用例中不起作用

时间:2017-05-26 13:46:50

标签: java spring spring-boot mybatis junit5

我使用spring-boot,JUnit5,Mybatis。

$data = $stats->orderBy('crossbow', 'desc')->take(1);
$data = $stats->orderBy('maul', 'desc')->take(1)->union($data);
$data = $stats->orderBy('swordtwo', 'desc')->take(1)->union($data);
$data = $stats->orderBy('swordone', 'desc')->take(1)->union($data);
$data = $data->get();

(1)正在回滚。并输出以下日志。

@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
        }   
    }
}

但是,(2)不起作用。我希望能够回滚到2017-05-26 22:21:29 [INFO ](TransactionContext.java:136) Rolled back transaction for test context ...

2 个答案:

答案 0 :(得分:6)

这是预期的: Spring TestContext Framework 从未支持嵌套测试类的“继承”。

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

但是,请注意,我可以与SPR-15366一起为嵌套测试类添加对“伪继承”的支持。

此致

Sam( Spring TestContext Framework的作者

答案 1 :(得分:1)

我用以下方式解决了它。

@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() {
        }   
    }
}