Я не понимаю, почему этот интеграционный тест не проходит. Я могу пройти тест, удалив аннотацию @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)
Я видел этот связанный пост, но все еще не сигары: (