3

GebSpec テストで hibernate セッションをフラッシュする必要があると思うので、sessionFactory を取得したいと考えています。

注入する必要があるように見えますが、次のようなことをすると:-

class MySpec extends GebSpec {
def sessionFactory
...
def "test session"(){
....do some setup
then: 
  assert sessionFactory != null
}

sessionFactory が null で失敗します。

4

1 に答える 1

5

私の質問に対する簡単な答えは、なぜそれをしたいのかということです。これは機能テストであり、実行中のアプリ JVM から離れている可能性があります。

その理由は、Web の問題が発生したときにドメイン オブジェクトが更新されていることを確認したいからです。Luke Daley は親切にも、かなりクールなRemote-Control Grails プラグイン ( https://github.com/alkemist/grails-remote-control )を使用してそれを行うことができると指摘しました。プラグインをインストールしてから進みます

 assert remote {
  MyDomainOb.findByName('fred') != null
 }

そして、そのクロージャーをサーバー上で実行するように送信し、テストできる結果を返します。結果はシリアライズ可能でなければなりません。

1 つの方法ですが、リモート プラグインは、課せられたドメイン モデルのためにフードの下で多くの複雑なオブジェクトが変更されている場合、テストの結果を取得するのが少し難しくなります。では、同じ JVM を使用しているときに、テストの休止状態セッションを取得するにはどうすればよいでしょうか?? このような:-

Session currentSession

    def setup() {
        ApplicationContext context = (ApplicationContext) ServletContextHolder.getServletContext().getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
        SessionFactory sf = context.getBean('sessionFactory')
        currentSession = sf.getCurrentSession()
    }

それを GebSpec の先頭に追加すると、 currentSession.clear() または currentSession.flush() を呼び出すことができます

テストセッションを更新する必要があったため、 currentsession.clear() が答えでした。

テスト対象のターゲットが別の VM にある場合、これは役に立たないため、リモートを使用する必要があることに注意してください。

于 2011-06-01T12:32:01.820 に答える