Grails 2'order'标准不适用于单元测试

时间:2012-10-11 07:52:10

标签: unit-testing grails grails-2.0 hibernate-criteria

我正在使用grails 2.1.0和groovy 1.8。我在服务中有以下代码:

def listServerPartners() {
    ServerModel.withCriteria {
        partner {
            order('name', 'asc')
        }
        projections {
            distinct('partner')
        }
    }
}

这适用于正在运行的应用程序和集成测试。但是,当我尝试使用单元测试时,我得到一个空白列表。

我注意到如果我将上面的代码更改为下面的代码并在对象伙伴中实现可比较的接口,则单元测试工作,但是应用程序和集成测试却没有。

def listServerPartners() {
    ServerModel.withCriteria {
        projections {
            distinct('partner')
        }
        order('partner', 'asc')
    }
}

在运行应用程序时查看SQL,我注意到对于第一个代码,我得到了一个

"order by partner_al1_.PartnerName asc"
而对于第二个代码,我得到了一个
"order by partner_al1_.Partner_Id asc"
,这显然是显而易见的我不想要的。

有关如何在运行单元测试的应用程序和集成测试时模拟正确行为的任何建议吗?

更新:单元测试的输出:

assert Partner.list() == results
               |      |  |
               |      |  []
               |      false
               [Partner 4, Partner 3, Partner 2, Partner 1]

- 谢谢

1 个答案:

答案 0 :(得分:0)

我更新了PlasticCriteria插件。现在它适用于此:

def a = new Artist(name: 'Andreas Achenbach').save()
def c = new Artist(name: 'Constance Gordon-Cumming').save()
def b = new Artist(name: 'Botero').save()
new Portrait(artist: a, name: "Clearing Up—Coast of Sicily").save()
new Portrait(artist: c, name: "Indian Life at Mirror Lake").save()
new Portrait(artist: c, name: "Temporary Chimneys and Fire Fountains").save()
new Portrait(artist: b, name: "Botero's Cat").save()
def artistList = Portrait.withCriteria{
    artist{
        order('name', 'asc')
    }
    projections{
        artist{
            distinct('name')
        }
    }
}
assert ['Andreas Achenbach', 'Botero', 'Constance Gordon-Cumming'] == artistList

可以帮到你 https://github.com/fabiooshiro/plastic-criteria

如果我将预测更改为:

projections{ distinct('artist') }

我收到了此集成错误:“ARTIST_ALI1_.NAME”必须位于此案例的结果列表中

但是在单元测试中工作。