gpt4 book ai didi

unit-testing - 在grails中执行 Controller 的单元测试时,不能使用grailsApplication.getMetadata.get (“”)

转载 作者:行者123 更新时间:2023-12-02 15:10:56 24 4
gpt4 key购买 nike

在我的grails应用程序中,在 Controller 中,我使用以下方法:

class SampleController {
def action1 = {
def abc = grailsApplication.getMetadata().get("xyz")
render abc.toString()
}
}

在运行应用程序时,它可以从application.properties中正确读取属性“xyz”,并且可以正常工作。但是当我为上述 Controller 编写单元测试用例时,如下所示:
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的新手。

最佳答案

mockController不会模拟GrailsApplication,您需要自己做。

最快的解决方案是:

protected void setUp() {
super.setUp()
mockLogging(DummyController)
GrailsApplication grailsApplication = new DefaultGrailsApplication()
controller.metaClass.getGrailsApplication = { -> grailsApplication }
}

该解决方案并不完美-它将在每次设置过程中创建一个新的 DefaultGrailsApplication,并且 mockController还会创建一些其他 DefaultGrailsApplication实例。

请注意,您不需要自己调用 mockController,这将由 ControllerUnitTestCase为您完成。

关于unit-testing - 在grails中执行 Controller 的单元测试时,不能使用grailsApplication.getMetadata.get (“”),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com