Groovy中无参数的模拟静态方法

Groovy中无参数的模拟静态方法,groovy,mocking,metaprogramming,Groovy,Mocking,Metaprogramming,我需要模拟一个静态方法。我正在使用中介绍的EMC方法。像这样 TestDaemon.metaClass.'static'.newDownloadManager = {downloadManager} newDownloadManager方法没有参数,由于某些原因,它没有被替换。原始代码被调用。在调试模式下,我可以看到我定义的闭包有一个参数。也许这就是原因?如何定义没有参数的闭包?或者如何模拟没有参数的静态方法 这样编写的闭包有一个隐式参数。使用{->}语法编写闭包。例如: x = { prin

我需要模拟一个静态方法。我正在使用中介绍的EMC方法。像这样

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

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

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

x = { println "foo" }
y = { -> println "foo" }

assert x.parameterTypes as List == [Object]
assert y.parameterTypes as List == []

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

谢谢,但这没有帮助。虽然在这种情况下闭包实际上没有参数。但是原始代码仍然调用。实际上它在groovy代码中工作。但是在java库中,它打算进行模拟,没有实际的代码替换发生。请注意,如果通过对象实例调用静态方法,则必须在创建对象之前修改元类。对类的元类更改不会影响已存在的类的实例。