非静态方法的GroovyMock是否具有指定的行为?

问题描述 投票:0回答:1

我将其放入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是一种非静态方法。代码...

groovy mocking spock non-static
1个回答
0
投票

作为documented,Groovy模拟仅在与Groovy类一起使用时才具有附加的“魔术”,但是我假设您正在尝试模拟java.io.File,它是Java JRE类。因此,Groovy模拟将表现得像普通的Spock模拟。所以我不知道为什么首先要使用Groovy模拟-也许是因为您想使用global: true功能以避免在应用程序类中重构可测性。

© www.soinside.com 2019 - 2024. All rights reserved.