3

Service 単体テストでモックされた Service にプロパティを設定する方法がわかりません。setPropertyGrails 2からなくなったと思われるデマンドオブジェクトとメソッドを使ってみました。

@TestFor(SomeService)
@Mock([HelperService])
class SomeServiceTests {

void testDoSomething() {
    def helperService = mockFor HelperService

    // tried this, error in method being tested
    helperService.setProperty('propToSet',['a','b'])
    // tried this, error in test
    helperService.demand.propToSet = ['a','b']
    // tried this, error in method being tested
    helperService.demand.getPropToSet() {['a','b']}

    service.helperService = helperService

    assert service.doSomething('aa') != null
}
}

これらのほとんどのエラーはNo such property: propToSet for class: grails.test.GrailsMock、私がテストしているメソッド内からスローされ、それを必要とします。上記の 2 番目のオプションでは、実際にはハード エラーが発生します。モックされた Grails オブジェクトにプロパティを設定するにはどうすればよいですか?

4

1 に答える 1

0

また、Grails のモッキング機能についても、あまり良くない経験があります。だから私はGMockを使っていて、それに満足しています。GMock は、コントローラー、サービス、ドメイン クラス、および Spock の仕様を含むすべての Grails テストでうまく機能します。

これを使用するには、次の行を grails-app/conf/BuildConfig.groovy に追加するだけです:

dependencies {
    test 'org.gmock:gmock:0.8.2'
}

そして、これがコードの GMock バージョンです。

@WithGMock
@TestFor(SomeService)
class SomeServiceTests {

    void testDoSomething() {
        def helperService = mock(HelperService)
        helperService.propToSet.returns(['a', 'b'])    
        service.helperService = helperService
        play {
            assert service.doSomething('aa') != null
        }
    }

}

play { }モック コードはブロック内でのみ影響を与えることに注意してください。したがって、assert ステートメントをラップするブロックが必要です。

于 2012-07-29T07:28:48.150 に答える