Модульный тест Grails для класса домена insertBefore

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

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

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

4 ответа

Решение

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

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

У меня была точно такая же проблема! В 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 методы.

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

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

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

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

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

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

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

Другие вопросы по тегам