0

私は 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 を見ると、最初のコードで、

"partner_al1_.PartnerName asc で注文"
2番目のものについては、
"partner_al1_.Partner_Id asc で注文"
、明らかに私が望まないものは何ですか。

アプリケーションと単体テストの統合テストを実行するときの正しい動作を模倣する方法について何か提案はありますか?

更新:単体テストからの出力:

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

- ありがとう

4

1 に答える 1

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" must be in the result list in this case

しかし、単体テストでは機能します。

于 2012-10-21T04:27:12.933 に答える