Spring 在grails.test.GrailsMock上设置属性
我似乎不知道如何在服务单元测试中设置模拟服务的属性。我尝试过使用demand对象和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
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语句。我必须检查一下,并让您知道它是如何运行的。