测试空的常规闭包?

Posted

技术标签:

【中文标题】测试空的常规闭包?【英文标题】:testing for empty groovy closure? 【发布时间】:2010-12-30 23:26:56 【问题描述】:

我想让用户提供一个带有属性的 groovy 类,该属性是一个文件选择器闭包,我将它传递给 AntBuilder 的“复制”任务:

  class Foo 
    def ANT =  fileset(dir:'/tmp/tmp1') 
  

在我的代码中,我将 ANT 属性设为“fAnt”并传递给 Ant:

  ant.copy(todir:'/tmp/tmp2', fAnt)

这可行 - 但是,如果用户传入一个空的闭包 (def ANT=) 或使用一个不选择任何内容的选择器(可能文件集目录不存在),那么它就会爆炸。我尝试用 try-catch 包围 ant 副本以捕获 InvokerInvocationException,但不知何故,异常还是通过了……当我追踪它时,有没有办法将 groovy Closure 的内容作为字符串读回,或者测试它是否为空?

【问题讨论】:

【参考方案1】:

简而言之:不。您不能在运行时以有意义的方式反编译闭包。如果它是用户提供的,那么闭包甚至可以是一个 Java 类。

长答案:如果你想做很多工作,你也许可以,但可能不值得。 Groovy 解析器是 API 的一部分,因此如果您可以访问源代码,理论上您可以检查 AST 并确定闭包是否为空。查看SourceUnit 类。

尽管如此,几乎可以肯定这不值得。您最好捕获异常并添加有用的消息,例如“您可能传递了一个空的闭包或无效的文件集”。

【讨论】:

【参考方案2】:

解决了一个谜团 - 我需要捕获的异常是 org.apache.tools.ant.BuildException - 所以我可以捕获它以捕获错误,但最初的问题仍然存在 - 有没有办法检查闭包的内容?

【讨论】:

以上是关于测试空的常规闭包?的主要内容,如果未能解决你的问题,请参考以下文章

闭包的常规缺陷以及唯一一种解决方案

使用闭包属性证明正则性

Android App常规测试内容

Linux 开发板常规测试

monkey实战--测试步骤常用参数常规monkey命令

monkey实战--测试步骤常用参数常规monkey命令