从grails 2.3.4迁移到3.3.8时无法模拟域

时间:2018-11-30 19:11:03

标签: grails mocking gorm geb

我有一个称为Provenance的域类,用于标记与其他创建方法(ETL等)相比,由应用程序创建的记录。该记录预先存在于数据库中,并且beforeInsert,beforeUpdate,beforeDelete引发RuntimeException强制将域设置为只读

SELECT COUNT(PlanId)
FROM PLANLOCATION
WHERE PLANLOCATION = LocationId

我正在测试一种保存Person(mockDomain)记录的服务方法。我曾经这样嘲笑过:

class Provenance implements Serializable {
    ...
    static Provenance MANUAL() {
        findByProvenanceType('MANUAL')
    }

    def beforeInsert() {
        throw new RuntimeException('create not allowed')
    }
    ...
}

迁移的主要更改是2.3.4,使用Person域的@Mock和使用3.3.8的嘲笑域。

这对于grails 2.3.4来说很好用。但是,当迁移到grails 3.3.8时,将保存的人级联到Provenance中,这将导致引发beforeInsert中的RuntimeException。

我还考虑过在Provenance上使用mockDomain并事先保存它,但是我遇到了同样的问题,因为不能重写beforeInsert来防止RuntimeException。关于为什么会在版本之间进行更改以及如何解决的任何想法?

1 个答案:

答案 0 :(得分:0)

根据enter image description here中ice1080的建议,我将beforeInsert中的逻辑移至另一种方法,并在测试中覆盖了该方法,以允许在设置过程中创建域