Интеграционные тесты и транзакции Grails

Я не понимаю, почему этот интеграционный тест не проходит. Я могу пройти тест, удалив аннотацию @Transactional (ropagation = Propagation.REQUIRES_NEW) над сервисный метод, ИЛИ установив transactional = false в тесте интеграции

, я понимаю, что сам тест интеграции выполняется в транзакции, и поэтому я 'Я получил аннотацию к методу службы.

class DbTests extends GrailsUnitTestCase {

boolean transactional = true
def customerService

void testTransactionsCommit() {
    def orderIds = [1, 2, 3]
    orderIds.each  { // lets make sure they all start out as Active
        def order = Order.get(it)
        order.isActive = true
        order.save(flush:true, validate:true, failOnError: true)
    }

    customerService.cancelOrders(orderIds)

    orderIds.each  {
        def order = Order.get(it).refresh()
        assertEquals false, order.isActive
    }
}

и мой метод обслуживания определен:

class CustomerService {

boolean transactional = true
@Transactional(propagation = Propagation.REQUIRES_NEW)
def cancelOrders(def orderIds) {
    orderIds.each {
        Order order = Order.get(it)
        if(order.id == 5) //
            throw new RuntimeException('Simulating an exception here, panic!')
        order.isActive = false
        order.save(flush:true, validate:true, failOnError: true)
        println "Order.id = $order.id is ${order.isActive? 'ACTIVE' : 'CANCELLED'}"
    }
}}

Сущность Order - это простой объект домена, и я использую Grails 1.2.1, MySQL 5.x (dialect = org.hibernate .dialect.MySQL5InnoDBDialect)

Я видел этот связанный пост, но все еще не сигары: (

Grails Service Transactions

6
задан Community 23 May 2017 в 12:24
поделиться