Модульный тест Grails для класса домена insertBefore - PullRequest
2 голосов
/ 25 мая 2011

Как я могу проверить метод initBefore в Groovy Domain-Classes с модульным тестом в Grails?

Я создал фиктивный объект, но метод beforeInsert не вызывается, пока не будет вызван myObject.save ()сохранение недоступно в средах тестирования.

Редактировать: это юнит-тест.ошибки нет, но метод beforeInsert не вызывается

Ответы [ 4 ]

4 голосов
/ 16 октября 2013

beforeInsert вызывается во время модульных тестов.Я могу проверить это в моих тестах.Пару вещей, которые следует учитывать:

  1. гарантирует, что вы используете метод beforeInsert, а не замыкание.Закрытие не будет работать правильно.
  2. оно вызывается, когда объект сбрасывается, поэтому, возможно, у вас есть ошибки сохранения без вывода сообщений заранее.В вашем тесте при сохранении объекта выполните .save (flush: true, failOnError: true)
0 голосов
/ 10 ноября 2014

У меня была точно такая же проблема!В GORM (по крайней мере, до текущей версии) метод save не вступает в силу немедленно только потому, что он вызывается!Если вы хотите, чтобы он вступил в силу немедленно, вам нужно указать flush:true, например: domain.save(flush:true).

, здесь написано http://grails.org/doc/2.2.x/ref/Domain%20Classes/save.html

Метод save информирует контекст постоянствачто экземпляр должен быть сохранен или обновлен.Объект не будет сохранен немедленно, если не используется аргумент flush:

Чтобы ответить на ваш вопрос, beforeInsert не вызывается до тех пор, пока сохранение не будет сохранено (сохранение вступит в силу), поэтому вы должны вызвать save с flushпроверить beforeInsert и beforeUpdate методы.

Надеюсь, это поможет!

0 голосов
/ 05 декабря 2011

Просто создайте объект домена и сохраните () его.Затем проверьте, манипулирует ли «beforeInsert» вашим объектом.

save () доступно в средах тестирования.Пожалуйста, покажите свою Stacktrace при вызове myDomainobject.save ()

0 голосов
/ 23 июня 2011

Хотите проверить, вызывается ли метод beforeInsert или логика beforeInsert верна?

Если вы хотите проверить, вызывается ли beforeInsert, тестовый класс должен расширить GrailsUnitTestCase. Это должно дать вам возможности для насмешки и добавить все методы, такие как save () и validate (). Вы можете проверить, вызывал ли максифицированный объект метод beforeInsert или нет, когда вы выполняете save ().

Если вы тестируете логику beforeInsert, вам не нужно ее высмеивать. Вы можете создать объект и проверить логику, как и другие модульные тесты.

Надеюсь, это поможет.

...