我似乎无法弄清楚如何在服务单元测试中为模拟服务设置属性。我试过使用需求对象和setProperty
方法,这些方法似乎已经从Grails 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
,它是从我正在测试的方法中抛出的,它需要它。上面的第二个选项实际上给出了一个硬错误。如何在模拟的Grails对象中设置属性?
最佳答案
我对Grails的模拟工具也没有那么好的经验。所以我一直在使用GMock并对此感到满意。 GMock与所有Grails测试(包括 Controller ,服务和域类以及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 { }
块中起作用。因此,我们需要用块来包装断言语句。
关于spring - 在grails.test.GrailsMock上设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704481/