我将其放入Spock测试中:
GroovyMock( File, global: true)
File.createNewFile() >> null
...我意识到这是非正统/愚蠢/好奇的:createNewFile
是一种非静态方法。
涉及的代码如下:
if( indexInfoFile.createNewFile() ) {
...从我的实验中可以看出,即使您尝试在模拟中放置一个块,像这样的模拟createNewFile
总是返回false
:
GroovyMock( File, global: true)
File.createNewFile() >> {
log.info( 'Hello mum!')
}
...日志消息未打印,但createNewFile
再次返回false
。
这实际上是我想要的(即模拟从false
返回的createNewFile
)。
这是有意记录的行为吗?
PS警告:根据我今天的经验,毫无疑问,此模拟方法确实可以替换所有File
实例上对该方法的所有调用。但是,它似乎也有一些令人震惊的副作用:例如,我在given
块中创建的目录之前发现2 GroovyMock
行之后的NOT仍然存在,但仍在given
中]块,当我去的时候>>
myDirPath.toFile().exists()
...我想这是因为
toFile
涉及对createNewFile
...的调用
我在Spock测试中放了这个:GroovyMock(File,global:true)File.createNewFile()>> null ...我意识到这是非正统/愚蠢/好奇的:createNewFile是一种非静态方法。代码...
作为documented,Groovy模拟仅在与Groovy类一起使用时才具有附加的“魔术”,但是我假设您正在尝试模拟java.io.File
,它是Java JRE类。因此,Groovy模拟将表现得像普通的Spock模拟。所以我不知道为什么首先要使用Groovy模拟-也许是因为您想使用global: true
功能以避免在应用程序类中重构可测性。