Grails:在测试中可用的运行时添加方法?

Posted

技术标签:

【中文标题】Grails:在测试中可用的运行时添加方法?【英文标题】:Grails: Added methods during runtime available in tests? 【发布时间】:2011-12-05 20:52:19 【问题描述】:

我正在尝试测试一个控制器,该控制器特别是使用 java.io.File 和 Grails 在运行时注入的一些方法/属性,例如:

空的 文件项 转移到()

我收到以下错误:

No such property: empty for class: java.io.File

有些方法很容易实现:

def testFile = new File('test/unit/resources/TestScript.groovy')
File.metaClass.getFileItem =  -> testFile 
File.metaClass.isEmpty =  -> false 

但其他人没有,所以我想知道是否有办法让 Grails 为我添加它们?我的理解是这是在集成测试中完成的,但是将测试移到那里会给我同样的错误。

任何帮助表示赞赏。

谢谢

乔纳斯

【问题讨论】:

这没有意义。 File 上的那些方法来自 Groovy,并且是 Groovy JDK 运行时的一部分。只要您正在运行 Groovy 代码,它们就应该存在。你试过运行grails clean吗? 你在哪里找到这个 File.empty 属性?我在 GDK javadocs 中没有看到它。 没错,我也无法在 javadocs 中找到它。我们的动作看起来很像下面使用它的站点上的清单 6:link 有趣的是,我没有收到以下行的错误:File.metaClass.isEmpty = -> false 那么,我将如何对清单 6 中的动作进行单元测试上面的链接? 【参考方案1】:

没错,我也无法在 javadocs 中找到它。我们的操作看起来很像下面使用它的网站上的清单 6:

http://www.ibm.com/developerworks/java/library/j-grails06099/index.html

有趣的是,我没有收到以下行的错误:

File.metaClass.isEmpty =  -> false 

【讨论】:

【参考方案2】:

您的测试类是继承自GroovyTestCase 还是继承自ControllerUnitTestCase? 对于集成测试,它应该是GroovyTestCase

【讨论】:

非常感谢。那可能是问题所在。我想过,但因为ControllerUnitTestCase 实际上是GroovyTestCase 的子类,所以我没有尝试... 糟糕。太早兴奋了……还是不行:-(

以上是关于Grails:在测试中可用的运行时添加方法?的主要内容,如果未能解决你的问题,请参考以下文章

在Grails 3中运行Grails功能测试

在 Grails 单元测试中注入服务

如何调试 grails 运行时异常?

您如何在 grails 2.3 中测试服务或控制器方法

单元测试控制器时无法模拟 Grails 服务方法 - MissingMethodException

在测试时定义 grails 内存设置