0

私のgrailsアプリケーションでは、コントローラで、次のようなものを使用しています:

class SampleController {
   def action1 = {
     def abc = grailsApplication.getMetadata().get("xyz")
     render abc.toString()
   }
}

アプリの実行中に、application.properties からプロパティ「xyz」を正しく読み取り、正常に動作します。しかし、上記のコントローラーの単体テストケースを次のように書くと:

class SampleControllerTests extends ControllerUnitTestCase {
  SampleController controller

  protected void setUp() {
    super.setUp()
    controller = new SampleController()
    mockController(SampleController)
    mockLogging(SampleController)
  }

  void testAction1() {
    controller.action1()
    assertEquals "abc", controller.response.contentAsString
  }
}

しかし、「grails test-app」を実行すると、application.properties からプロパティ「xyz」が取得され、期待どおりに返されることが期待されます。しかし、「No such property : grailsApplication」というエラーが表示されます。

わかりました。grailsApplicationオブジェクトをモックする必要があると思います。多くのオプションも試しましたが、それらはすべて機能しませんでした。

私はGrailsが初めてです。

4

1 に答える 1

2

mockControllerをあざけることはありませんGrailsApplication、あなたはそれを自分でする必要があります。

最速の解決策は次のようになります。

protected void setUp() {
        super.setUp()
        mockLogging(DummyController)
        GrailsApplication grailsApplication = new DefaultGrailsApplication()
        controller.metaClass.getGrailsApplication = { -> grailsApplication }
    }

このソリューションは完全ではありません。DefaultGrailsApplicationセットアップごとに新しいものが作成され、mockControllerの追加のインスタンスもいくつか作成されますDefaultGrailsApplication

あなたが自分で呼び出す必要はないことに注意してください、mockControllerそれはあなたのために行われControllerUnitTestCaseます。

于 2013-03-19T14:33:44.873 に答える