Testing 最新Groovy稳定版本的令人费解的问题
我刚开始一个新的Gradle项目。在我以前的build.gradles中,我曾说过:Testing 最新Groovy稳定版本的令人费解的问题,testing,gradle,groovy,mocking,Testing,Gradle,Groovy,Mocking,我刚开始一个新的Gradle项目。在我以前的build.gradles中,我曾说过: compile 'org.codehaus.groovy:groovy-all:2.4.15' testCompile 'org.spockframework:spock-core:1.1-groovy-2.4' 。。。还有这些依赖关系: testCompile 'net.bytebuddy:byte-buddy:1.6.11' testCompile 'org.objenesis:objenesis:2.6
compile 'org.codehaus.groovy:groovy-all:2.4.15'
testCompile 'org.spockframework:spock-core:1.1-groovy-2.4'
。。。还有这些依赖关系:
testCompile 'net.bytebuddy:byte-buddy:1.6.11'
testCompile 'org.objenesis:objenesis:2.6'
通过反复试验,我发现Groovy 2.4.15和这些Bytebuddy和Objensis依赖项使我能够模拟BufferedReader
。这在控制台应用程序中很有用,我想模拟用户对控制台的输入。因此,“控制台处理程序”类具有以下字段/属性:
def br = new BufferedReader( new InputStreamReader(System.in, 'UTF-8' ))
在app类中按如下方式使用以获取用户控制台输入:
String response = br.readLine().trim()
。。。这意味着Spock测试可以做这种事情:
def 'prompt should show help on entering H'() {
given:
consoleHandler.br = Mock( BufferedReader )
consoleHandler.br.readLine() >> 'h'
i、 e.在控制台模拟字母h的输入
。。。但它不适用于Groovy 2.5.3及其匹配的Spock依赖项:对于这个新项目,我提出:
compile 'org.codehaus.groovy:groovy-all:2.5.3'
testCompile 'org.spockframework:spock-core:1.2-groovy-2.5'
。。。具有相同的ByteBuddy和Objenisis依赖项。我发现以下测试失败:
java.lang.IllegalArgumentException:无法在处创建类型
net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:140)位于
net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:346)
位于net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:161)
net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:355)
在
org.spockframework.mock.runtime.ByteBuddyMockFactory.createMock(ByteBuddyMockFactory.java:41)
在
org.spockframework.mock.runtime.ProxyBasedMockFactory.create(ProxyBasedMockFactory.java:42)
在
org.spockframework.mock.runtime.JavaMockFactory.createInternal(JavaMockFactory.java:58)
在
org.spockframework.mock.runtime.JavaMockFactory.create(JavaMockFactory.java:38)
在
org.spockframework.mock.runtime.CompositeMockFactory.create(CompositeMockFactory.java:42)
在
org.spockframework.lang.SpecInternals.createMock(SpecInternals.java:46)
在
org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:294)
在
org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:284)
在
org.spockframework.lang.SpecInternals.MockImpl(SpecInternals.java:100)
在core.FirstSpec.setup(first_tests.groovy:20)中,由以下原因引起: java.lang.NoSuchMethodError: net.bytebuddy.dynamic.loading.ClassInjector$UsingLookup.isAvailable()Z 在 org.spockframework.mock.runtime.ByteBuddyMockFactory.DetermineTestClassLoadingStrategy(ByteBuddyMockFactory.java:103) 在 org.spockframework.mock.runtime.ByteBuddyMockFactory.access$300(ByteBuddyMockFactory.java:27) 在 org.spockframework.mock.runtime.ByteBuddyMockFactory$1.call(ByteBuddyMockFactory.java:54) 在 org.spockframework.mock.runtime.ByteBuddyMockFactory$1.call(ByteBuddyMockFactory.java:43) 位于net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:138)
有没有Groovyüber极客?你必须升级
byte buddy
:
testCompile 'net.bytebuddy:byte-buddy:1.8.21'
Spock版本1.1-groovy-2.4
取决于字节伙伴:1.6.5
-
Spock版本
1.2-groovy-2.5
取决于byte buddy:1.8.21
-太好了,谢谢。仍然有点困惑:如果byte buddy是Spock的“依赖项”,为什么Spock在部署和使用给定版本的Spock时不自动下载它?此依赖项标记为可选,这意味着它不参与依赖项版本解析。当您直接在build.gradle中定义1.6.5
时,这就是得到解决的版本。感谢您的澄清。