我如何在 Grails 2.4.5 中使用复合 id 模拟这个对象?

How do I mock this object with composite id in Grails 2.4.5?

import groovy.transform.EqualsAndHashCode

@EqualsAndHashCode(includes = ['action', 'reason'])
class MyObject implements Serializable {
    String action
    String reason
    String description

    static mapping = {
        table name: "my_object"
        version false
        id composite: ["action", "reason"], generator: 'assigned'

        cache usage: "read-only"

        action column: "prog_action_c"
        reason column: "prog_reason_c"
        description column: "descr_c"
    }
}

我尝试在我的单元测试中模拟这个对象,如下所示:

.....
def setup() {
..
    mockDomain(MyObject,[
          [
            action : 'ACT1',
            reason : 'REAS1',
            description : 'First reason'
          ],
          [
            action : 'ACT2',
            reason : 'REAS2',
            description : 'Second reason'
          ]
     ])

     def myObject = MyObject.first()

}
...

当我使用 findAll() 或 first() 查询对象时,我得到空列表或 null

应该如何模拟这个对象?

简短的回答是我们不能在 grails 2.4.5 中以这种方式模拟对象我们如何模拟是:定义一个方法来在你的 controller/service 无论你正在测试什么class。然后监视 class 测试,并将方法模拟为 return 任何你想要的域对象。