복붙노트

[SPRING] JUnit5의 @Nested 클래스에서 테스트 롤백이 작동하지 않습니다.

SPRING

JUnit5의 @Nested 클래스에서 테스트 롤백이 작동하지 않습니다.

나는 스프링 부트, 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로 롤백 할 수 있기를 원합니다.

해결법

  1. ==============================

    1.Spring TestContext Framework는 중첩 된 테스트 클래스에 대해 "상속"을 지원하지 않습니다.

    Spring TestContext Framework는 중첩 된 테스트 클래스에 대해 "상속"을 지원하지 않습니다.

    따라서 "해결 방법"은 실제로 현재 시점에서 목표를 달성하는 올바른 방법입니다.

    그러나 SPR-15366과 함께 중첩 된 테스트 클래스에 대해 "의사 상속"에 대한 지원을 추가 할 수 있습니다.

    문안 인사,

    Sam (Spring TestContext Framework 작성자)

  2. ==============================

    2.나는 다음과 같은 방법으로 그것을 해결했다.

    나는 다음과 같은 방법으로 그것을 해결했다.

    @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() {
            }   
        }
    }
    
  3. from https://stackoverflow.com/questions/44203244/transaction-roll-back-is-not-working-in-test-case-in-nested-class-of-junit5 by cc-by-sa and MIT license