2013-11-01 5 views
0

У меня есть служба, которая обновляет столбец db. Обновление выполняется с помощью executeUpdate. В моем тесте после метода службы я пытаюсь загрузить запись. Загрузка записей и каждое поле заполняются за исключением того, что я только что обновил в службе.grails executeUpdate ошибка очистки в тесте интеграции

Чтобы сделать его более странным, когда я запускаю код, как правило, через браузер, он отлично работает. Я могу посмотреть в базе данных и увидеть, что поле сохраняется. Только интеграционный тест не работает. Это должно быть какая-то проблема спящего сеанса с грязным полем.

Вот мой урезанный код. Я оставил информацию о контроллере. Мой тест вызывает контроллер, контроллер вызывает службу.

class BasicProfile { 
    static hasMany = [ photos:Photo ] 
} 

class Photo { 
    BasicProfile basicProfile 
    String caption 
    String publicId 

    static belongsTo = [ basicPofile:profile ] 
} 


class PhotoService { 

    def updateCaption() { 
     ... 
     Photo.executeUpdate("update Photo p set p.caption = ? where p.basicProfile.id = ? and p.publicId = ? ", 
      [newCaption, profile.id, publicId]) 
     ... 
    } 
} 


void testUpdateCaption() { 
    ... 
    controller.updateCaption() //controller just calls the photoService method 
    //get json result from controller to load publicId 
    ... 
    Photo photo = Photo.findByPublicId(publicId) 

    assertEquals "my new caption", photo.caption //photo.caption is null, but the rest of the photo object is populated properly from the database load 
} 

Я добавил точку останова на утверждение, чтобы просмотреть экземпляр фотографии. Это допустимый экземпляр, и каждое поле заполняется данными с момента его создания (до вызова контроллера.updateCaption(). Но после вызова controller.updateCaption() поле заголовка должно иметь действительные данные, но оно по-прежнему равно нулю (. по умолчанию при создании экземпляра)

ответ

1

это, вероятно, кэш вашего экземпляра домена, попробуйте это:

void testUpdateCaption() { 
    controller.updateCaption() 
    //force the query in a clean hibernate session 
    Photo.withNewSession { 
    def photo = Photo.findByPublicId(publicId) 
    assertEquals "my new caption", photo.caption 
    } 
} 
+0

Yep, что установил ее. – spock99

Смежные вопросы