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前に開始参照ログの視点から(「then節」ここ

は私のテストです)。しかし、テストはbeacuaseデータベースが空ではありません。 @Transactionalアノテーションを削除すると、それは渡されましたが、挿入されたレコードはDBに残っていました。私はここで間違って何をしていますか?

+0

時々、値を表示するためにトランザクションをフラッシュする必要があります。 –

答えて

0

どこに問題があるのか​​が見つかりました。 jooqの後に春のフレームワークを追加しました。 jooqのための私の最終的な構成は以下のようになります。私はこの部分を削除し、トランザクションが働く春ブーツの自動設定を使用する場合は、しかし、私がチェックしたDSLContextの設定がどのように見えるか、スプリングによって作成されたときに、私はのTransactionProviderを持って

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

とExecuteListenerProviderがありません。私はそれを注入し、私のカスタム設定に設定すると、トランザクションはまだ動作しません。

関連する問題