У меня есть класс домена под названием Provenance, который используется для маркировки записей, созданных приложением, по сравнению с другими методами создания (ETL и т. Д.).Запись предварительно существует в БД, а beforeInsert, beforeUpdate, beforeDelete генерирует исключение RuntimeException для принудительного применения домена только для чтения
class Provenance implements Serializable {
...
static Provenance MANUAL() {
findByProvenanceType('MANUAL')
}
def beforeInsert() {
throw new RuntimeException('create not allowed')
}
...
}
Я тестирую метод службы, который сохраняет запись Person (mockDomain).Я смоделировал это так:
given:
def provenance = GroovyMock(Provenance, global: true)
...
when:
def result = service.savePerson(params)
...
then:
1 * Provenance.MANUAL() >> provenance
result.person.provenance == provenance
Основным изменением для миграции является использование 2.3.4 @Mock для домена Person против mockDomain для 3.3.8.
Это работало нормально дляГраальс 2.3.4.Но при переходе на Grails 3.3.8 сохранение человека происходит каскадно в Provenance, что вызывает исключение RuntimeException от beforeInsert.
Я также думал об использовании mockDomain в Provenance и сохранении его заранее, но у меня та же проблема, потому что beforeInsert не может быть переопределено, чтобы предотвратить RuntimeException.Любые мысли о том, почему это будет меняться между версиями и как обойти это?