Предложение Sql является откатом до завершения интеграционного теста

Pulkownik спросил: 13 октября 2017 в 07:00 в: java

У меня проблема, и после двух дней исследований я не смог найти решение. Пока у меня есть простое приложение, я просто прочитал все данные из таблицы и хотел написать для них интеграционный тест.

Вот мой тест:

@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 [DefaultTestContext@6a01e23 testClass = StockFacadeIT, testInstance = com.gpw.radar.stock.StockFacadeIT@455cbf18, testMethod = $spock_feature_0_0@StockFacadeIT, [...] 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 [DefaultTestContext@6a01e23 testClass = StockFacadeIT, testInstance = com.gpw.radar.stock.StockFacadeIT@455cbf18, testMethod = $spock_feature_0_0@StockFacadeIT, testException = Condition not satisfied:

Таким образом, с точки зрения журнала, я вижу, что транзакция начинается перед тестом, а откат выполняется после теста ("затем предложение"). Но тест не проходит, потому что база данных beacuase пуста. Когда я удаляю аннотацию @Transactional, она прошла, но вставленные записи остались в БД. Что я здесь не так делаю?

0 ответов