【问题标题】:Mock static method with no parameters in GroovyGroovy 中没有参数的模拟静态方法
【发布时间】:2011-07-02 04:49:04
【问题描述】:

我需要模拟一个静态方法。我正在使用Mocking static methods using groovy 中描述的 EMC 方法。像这样

TestDaemon.metaClass.'static'.newDownloadManager = {downloadManager}

newDownloadManager 方法没有参数,并且由于某种原因它没有被替换。调用原始代码。在调试模式下,我可以看到我定义的闭包有一个参数。可能是这个原因?如何定义没有参数的闭包?或者我如何模拟没有参数的静态方法?

【问题讨论】:

    标签: groovy mocking metaprogramming


    【解决方案1】:

    元类更改对 Java 代码不可见。 Groovy 无法帮助您模拟从 Java 代码调用的静态方法。您将不得不改用 JMockit 之类的东西(或重构被测代码)。

    【讨论】:

      【解决方案2】:

      这样写的闭包有一个隐式参数。使用{ -> } 语法编写闭包。示例:

      x = { println "foo" }
      y = { -> println "foo" }
      
      assert x.parameterTypes as List == [Object]
      assert y.parameterTypes as List == []
      

      【讨论】:

      • 谢谢,但这没有帮助。尽管在这种情况下闭包实际上没有参数。但还是调用了原来的代码。
      • 实际上它在 groovy 代码中工作。但是在打算进行模拟的 java 库中没有发生实际的代码替换。
      • 请注意,如果您通过对象实例调用静态方法,则必须在对象创建之前修改元类。对类的元类更改不会影响已存在的类的实例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      相关资源
      最近更新 更多