Unit testing Grails测试中的模拟配置
在Grails2.0.X之前,可以使用测试扩展的基类提供的Unit testing Grails测试中的模拟配置,unit-testing,grails,groovy,mocking,Unit Testing,Grails,Groovy,Mocking,在Grails2.0.X之前,可以使用测试扩展的基类提供的mockConfig方法模拟配置。但是,在Grails2.0.X中,建议测试类使用@TestFormixin,而不是扩展基类 这个mixin似乎没有提供任何与mockConfig方法等价的东西,因此我无法理解如何在Config.groovy中模拟值,因为看起来mockConfig()在Grails 2.x中已经不存在了。这个怎么样: def mockConfig = new ConfigObject() mockConfi
mockConfig
方法模拟配置。但是,在Grails2.0.X中,建议测试类使用@TestFor
mixin,而不是扩展基类
这个mixin似乎没有提供任何与mockConfig
方法等价的东西,因此我无法理解如何在Config.groovy
中模拟值,因为看起来mockConfig()在Grails 2.x中已经不存在了。这个怎么样:
def mockConfig = new ConfigObject()
mockConfig.some.config.setting = "foo"
def myService = new MyService()
myService.grailsApplication = [config: mockConfig]
在新的Grails2.x测试中,似乎已经有了一个
config
对象。这么说就足够了
config.some.config.setting = 'foo'
然后可以从被测对象的@TestFor
中访问
如果您需要手动创建对象,那么在测试范围内还有一个grailsApplication
对象,config
对象就属于该对象。所以这应该是可行的-
config.some.config.setting = 'foo'
def myService = new MyService(grailsApplication:grailsApplication)
我这样做(在测试服务时):
无需进行其他模拟。您可以访问grailsApplication.config,因此可以根据需要修改这些值,以便执行以下操作
grailsApplication.config.some.config.setting = 'foo'
通过这种方式(使用service.grailsApplication
而不仅仅是公认答案中建议的grailsApplication
),您还可以避免将配置泄露给其他测试,这可能会使它们变得不稳定,因此+1,谢谢。
grailsApplication.config.some.config.setting = 'foo'