Groovy:使用验证(和内联模拟)的 Mockito UnfinishedStubbingException
Groovy: Mockito UnfinishedStubbingException using verify (and inline mocks)
我正在尝试 verify
调用 FileChooser
上的方法。
我在 Groovy 中编码,这似乎是问题所在。
我正在使用 "incubating" Mockito 功能,它使您甚至可以模拟 final
class.
代码是:
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)
(注意第 91 行是 verify
行)
...然后继续说final
方法(showOpenDialog
不是final
),缺少whenReturn
(不适用)等
我build.gradle中GRADLE_HOME中的Mockito是2.7.22版本。
FileChooser
是 javafx.stage.FileChooser
.
Java 版本是 1.8.0_121.
我创建了一个全新的 Gradle 项目...并做了同样的事情,只有 Java 个文件。模拟工作正常,测试通过!
通过 "adding back" 使 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
。
"Workaround" ... 对于通常从 Java 移动到 Groovy 的任何人。
要学习 Groovy 我实际上正在关注一本书,Groovy in Action,第二版,由 [=15 与其他人合着=]!
我现在已经谈到了关于测试的部分,它被设计到语言中,并利用了 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(乔恩,你在吗?)可以找出为什么 Mockito 会产生这个 UnfinishedStubbingException
在 Groovy.
注意,您似乎无法在 Mockito 测试中单独使用 GroovyMock
...它似乎是 Spock 框架的一部分。
我正在尝试 verify
调用 FileChooser
上的方法。
我在 Groovy 中编码,这似乎是问题所在。
我正在使用 "incubating" Mockito 功能,它使您甚至可以模拟 final
class.
代码是:
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)
(注意第 91 行是 verify
行)
...然后继续说final
方法(showOpenDialog
不是final
),缺少whenReturn
(不适用)等
我build.gradle中GRADLE_HOME中的Mockito是2.7.22版本。
FileChooser
是 javafx.stage.FileChooser
.
Java 版本是 1.8.0_121.
我创建了一个全新的 Gradle 项目...并做了同样的事情,只有 Java 个文件。模拟工作正常,测试通过!
通过 "adding back" 使 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
。
"Workaround" ... 对于通常从 Java 移动到 Groovy 的任何人。
要学习 Groovy 我实际上正在关注一本书,Groovy in Action,第二版,由 [=15 与其他人合着=]!
我现在已经谈到了关于测试的部分,它被设计到语言中,并利用了 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(乔恩,你在吗?)可以找出为什么 Mockito 会产生这个 UnfinishedStubbingException
在 Groovy.
注意,您似乎无法在 Mockito 测试中单独使用 GroovyMock
...它似乎是 Spock 框架的一部分。