Неполадки, связанные с переносом домена при переходе с грааля с 2.3.4 на 3.3.8. - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть класс домена под названием 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.Любые мысли о том, почему это будет меняться между версиями и как обойти это?

1 Ответ

0 голосов
/ 03 декабря 2018

следуя совету ice1080 в Переопределив закрытие событий в классе домена Grails GORM для модульного тестирования , я переместил логику beforeInsert в другой метод и переопределил этот метод в тесте, чтобы разрешить создание домена во времяустановка

...