2017-11-06 9 views
0

문제점이 있으며 연구 2 일 후에 솔루션을 찾을 수 없습니다. 지금까지 간단한 응용 프로그램을 가지고 테이블에서 모든 데이터를 읽고이를위한 통합 테스트를 작성하려고했습니다.통합 테스트가 끝나기 전에 Sql 절이 롤백 됨

로그에서
@Transactional 
@SpringBootTest 
@ActiveProfiles("integrationTest") 
class StockFacadeIT extends Specification { 

    @Autowired 
    StockFacadeImpl stockFacade 

    @Autowired 
    DSLContext dslContext 

    @Sql(scripts = "/add_sample_stocks.sql") 
    def 'should return list of ticker in correct order'() { 
     when: 
     def tickers = stockFacade.loadAllTickers(dslContext) 
     println "when cluase" 

     then: 
     println "then cluase" 
     tickers.getAt(0) == 'abc' 
     tickers.getAt(1) == 'gpw' 
     tickers.getAt(2) == 'kgh' 
     tickers.getAt(3) == 'tpe' 
    } 
} 

내가 볼 :

2017-11-06 21:30:09.478 INFO 21124 --- [   main] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [[email protected] testClass = StockFacadeIT, testInstance = [email protected], testMethod = [email protected], [...] rollback [true] 
2017-11-06 21:30:09.478 INFO 21124 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executing SQL script from class path resource [add_sample_stocks.sql] 
2017-11-06 21:30:09.478 INFO 21124 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executed SQL script from class path resource [add_sample_stocks.sql] in 0 ms. 
2017-11-06 21:30:09.712 INFO 21124 --- [   main] org.jooq.Constants      : 
when cluase 
then cluase 
2017-11-06 21:30:09.869 INFO 21124 --- [   main] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test context [[email protected] testClass = StockFacadeIT, testInstance = [email protected], testMethod = [email protected], testException = Condition not satisfied: 

그래서 테스트 후에 실행되는 트랜잭션 테스트 및 rolback 전에 시작 참조 로그 관점에서 ("다음 절"여기

내 테스트입니다). 그러나 테스트는 beacuase 데이터베이스를 통과하지 못합니다. @Transactional 어노테이션을 지우면 통과했지만 삽입 된 레코드는 DB에 머물렀다. 여기서 내가 뭘 잘못하고 있니?

+0

때로는 값을 표시하기 위해 트랜잭션을 플러시 할 필요가 있습니다. –

답변

0

문제가있는 부분을 발견했습니다. jooq 후에 스프링 프레임 워크를 추가했습니다. jooq에 대한 나의 최종 구성 보이는 같은 :

@Bean 
    @Profile("integrationTest") 
    public DSLContext TestDslContext(DataSource dataSource) { 
     return DSL.using(new DefaultConfiguration() 
       .set(dataSource) 
       .set(new Settings().withRenderNameStyle(RenderNameStyle.AS_IS)) 
       .set(SQLDialect.H2) 
       .set(getRecordMapperProvider()) 
     ); 
    } 

그래서이 부분을 제거하고 스프링에 의해 생성 될 때, 그러나, 나는 DSLContext의 설정이 어떻게 보이는지 확인하신 후 나는 TransactionProvider이 작품 거래 부팅 봄의 자동 설정을 사용하는 경우와 ExecuteListenerProvider가 없습니다. 내가 그것을 삽입하고 내 사용자 지정 구성 설정 트랜잭션이 여전히 작동하지 않습니다.