Spring 在grails.test.GrailsMock上设置属性

Spring 在grails.test.GrailsMock上设置属性,spring,unit-testing,grails,Spring,Unit Testing,Grails,我似乎不知道如何在服务单元测试中设置模拟服务的属性。我尝试过使用demand对象和setProperty方法,这似乎已经从Grails2中消失了 @TestFor(SomeService) @Mock([HelperService]) class SomeServiceTests { void testDoSomething() { def helperService = mockFor HelperService // tried this, error in method

我似乎不知道如何在服务单元测试中设置模拟服务的属性。我尝试过使用demand对象和
setProperty
方法,这似乎已经从Grails2中消失了

@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
}
}

对于其中大多数,错误是
没有这样的属性:propToSet For class:grails.test.GrailsMock
,它是从我正在测试的需要它的方法中抛出的。上面的第二个选项实际上给出了一个硬错误。如何在模拟的Grails对象中设置属性?

我对Grails模拟工具也没有很好的经验。所以我一直在使用GMock,并且对它很满意。GMock可以很好地处理所有Grails测试,包括控制器、服务和域类以及Spock的规范

要使用它,只需将以下行放入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语句。

我必须检查一下,并让您知道它是如何运行的。