gpt4 book ai didi

unit-testing - 在 grails 中元编程的正确方法,以便在单元测试中可用

转载 作者:行者123 更新时间:2023-12-01 04:06:40 25 4
gpt4 key购买 nike

我可以使用以下行向 Groovy 中的 java Integer 类型添加一个方法:

ExpandoMetaClass.EnableGlobally()
Integer.metaClass.gimmeAP = {->return 'p'}

我不知道为什么我需要那个,但它明白了这一点。现在我可以调用 Integers 并返回一个“p”。现在假设我希望在 grails 应用程序中使用它,以便我可以在域对象中进行调用。我遇到的具体问题是,当我将这些元编程行放在 bootstrap 中时,所有元编程在单元测试中都不可用,因此我的单元测试失败并出现诸如“没有方法 gimmeAP for java.lang.Integer”之类的错误或类似的东西。

我如何更好地包含元编程,或者执行 bootstrap 的那部分,以便我可以在单元测试中使用我精心设计的语法?

我见过这个问题: Grails - Making Methods Globally Available and Metaclass Programming看来我的线路 ExpandoMetaClass.EnableGlobally()可能会解决他的问题,但我用对了吗?

最佳答案

单元测试不执行 Bootstrap。我个人更喜欢创建一个执行上述元编程的 mockFoo 方法,然后我将从测试设置中调用 mockFoo。
另请查看 GrailsUnitTestCase.registerMetaClass。在添加模拟方法之前注册元类,以便它们不会在其他测试中泄漏。

    registerMetaClass(SecurityUtils)
SecurityUtils.metaClass.'static'.getSubject = { ->
return [logout: { return true } ] as Subject
}

我知道您想让您的动态方法可用于所有单元测试,但没有什么可用于单元测试的 bootstrap 。所以你必须在每次测试中都这样做。

您可以使用静态方法创建 MockHelper,并从测试 setUp 中调用它。

关于unit-testing - 在 grails 中元编程的正确方法,以便在单元测试中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8884756/

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