2017-05-26 166 views
1

我使用spring-boot,JUnit5,Mybatis。事務回滾在JUnit5的@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);  
    } 

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

回答

3

這是可以預料的:在了Spring TestContext框架從未支持「繼承」嵌套測試類。

因此,您的「解決方法」實際上是在此時間點實現您的目標的正確方法。

但是,請注意,我可以爲嵌套的測試類與SPR-15366一起添加對「僞繼承」的支持。

問候,

山姆

0

我解決它以下列方式..

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

(春季TestContext框架作者)你介意[創建在JUnit 5項目的問題(https://github.com/junit-team/ junit5/issues/new),所以一些 – Nicolai

+0

創建了問題。 https://github.com/junit-team/junit5/issues/868 –

+0

哦,該死的我忘了編輯我的評論。哎呀!我意外地鏈接了錯誤的項目,[這一個](https://github.com/sbrannen/spring-test-junit5)可能會更好。但是我們會看到...... – Nicolai