在我的grails应用程序中,在控制器中,我使用了以下类似的东西:
class SampleController {
def action1 = {
def abc = grailsApplication.getMetadata().get("xyz")
render abc.toString()
}
}
在运行应用程序时,它正确地从application.properties读取属性“xyz”并且工作正常。但是当我为上述控制器编写单元测试用例时如下:
class SampleControllerTests extends ControllerUnitTestCase {
SampleController controller
protected void setUp() {
super.setUp()
controller = new SampleController()
mockController(SampleController)
mockLogging(SampleController)
}
void testAction1() {
controller.action1()
assertEquals "abc", controller.response.contentAsString
}
}
但是当我做“grails test-app”时,我希望它会从application.properties中获取属性“xyz”,并将按预期返回。但它给出的错误是“没有这样的属性:grailsApplication”。
我理解,我想我需要模仿grailsApplication
对象,我也尝试了许多选项但是所有这些都没有用。
我是Grails的新手。
答案 0 :(得分:2)
mockController
不会嘲笑GrailsApplication
,您需要自己动手。
最快的解决方案是:
protected void setUp() {
super.setUp()
mockLogging(DummyController)
GrailsApplication grailsApplication = new DefaultGrailsApplication()
controller.metaClass.getGrailsApplication = { -> grailsApplication }
}
此解决方案并不完美 - 它会在每次设置期间创建新的DefaultGrailsApplication
,而mockController
也会创建一些DefaultGrailsApplication
的其他实例。
请注意,您无需亲自致电mockController
,ControllerUnitTestCase
将为您完成。