gpt4 book ai didi

gradle - Groovy:使用验证(和内联模拟)的Mockito UnfinishedStubbingException

转载 作者:行者123 更新时间:2023-12-03 04:23:43 25 4
gpt4 key购买 nike

我正在尝试verifyFileChooser上调用方法。

我在Groovy中编码,这似乎是问题所在。

我正在使用“孵化”的Mockito功能,该功能甚至可以模拟final类。

代码是:

    FileChooser mockFC = mock(FileChooser.class)
doReturn(mockFC).when(spyCH).getFileChooser()
...
verify( mockFC, times( 1 )).showOpenDialog( any() )

这给出:

org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
...
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:55) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:197) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:217) at core.ConsoleHandlerFTs.shouldShowFileChooserDialogOnEnteringO(ConsoleHandlerFTs.groovy:91)



(NB行91是 verify行)

...然后继续讨论 final方法( showOpenDialog不是 final),缺少 whenReturn(不适用)等。

我在GRADLE_HOME的build.gradle中的Mockito是2.7.22版。 FileChooserjavafx.stage.FileChooser
Java版本是1.8.0_121。

我创建了一个全新的Gradle项目...并仅使用Java文件执行了相同的操作。模拟工作正常,测试通过!

通过“添加”使Groovy在Gradle项目中发挥作用的点点滴滴,似乎可以解决问题:
apply plugin: 'groovy'

和(依赖)
compile 'org.codehaus.groovy:groovy:3.0.0-alpha-1'

问题再次发生。也就是说,即使没有创建任何.groovy文件。然后,我尝试了groovy的早期版本,降至2.3.11。结果相同。

通过搜索,我认为可能牵涉到“bytebuddy”包,但是将以下行添加到依赖项中可确保GRADLE_HOME中没有较早的版本:
compile 'net.bytebuddy:byte-buddy:1.6.11'

运行Groovy测试文件时仍然出现 UnfinishedStubbingException

最佳答案

“解决方法” ...适用于通常从Java迁移到Groovy的任何人。

要学习Groovy,我实际上正在阅读JON SKEET等人合着的《 Groovy in Action》第二版。

现在,我将介绍有关测试的部分,它是语言的一种设计,并且利用了Groovy的惊人功能。

看来Groovy的Spock测试框架是要走的路...并且final可以模拟GroovyMock类。我能够编写一个测试来完成这项工作:

class XXX extends Specification {

@Rule
public TextFromStandardInputStream systemInMock = emptyStandardInputStream()
def xxx(){
given:
FileChooser fc = GroovyMock( FileChooser )
ConsoleHandler ch = Spy( ConsoleHandler ){
getFileChooser() >> fc
}
ch.setMaxLoopCount 10
systemInMock.provideLines( "o" )

when:
com.sun.javafx.application.PlatformImpl.startup( {} )
ch.loop()
Thread.sleep( 2000L ) // needs improvement with a Latch or something!

then:
1 * fc.showOpenDialog( _ )
}
}

...如果某些Groovyübermind(Jon,您在吗?)能找出Mockito为什么在Groovy中生成此 UnfinishedStubbingException的话,那还是很不错的。

注意,您似乎无法在Mockito测试中单独使用 GroovyMock ...它似乎是Spock框架的一部分。

关于gradle - Groovy:使用验证(和内联模拟)的Mockito UnfinishedStubbingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48360842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com