Я только начал новый проект 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'
В процессе проб и ошибок я обнаружил, что Groovy 2.4.15 с этими зависимостями Bytebuddy и Objensis позволил мне высмеивать BufferedReader
. Это оказалось полезным в консольном приложении, где я хотел высмеивать ввод пользователя в консоль. Таким образом, класс «обработчик консоли» имеет следующее поле / свойство:
def br = new BufferedReader( new InputStreamReader(System.in, 'UTF-8' ))
используется следующим образом в классе приложения для получения ввода с консоли пользователя:
String response = br.readLine().trim()
... это означает, что тесты Спока могут делать такие вещи:
def 'prompt should show help on entering H'() {
given:
consoleHandler.br = Mock( BufferedReader )
consoleHandler.br.readLine() >> 'h'
т.е. смоделируйте ввод буквы h на консоли.
... но он не работает с Groovy 2.5.3 и соответствующей ей зависимостью от Спока: для этого нового проекта я поставил:
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)
at core.FirstSpec.setup (first_tests.groovy: 20)
Причина:
java.lang.NoSuchMethodError:
net.bytebuddy.dynamic.loading.ClassInjector $ UsingLookup.isAvailable () Z
в
org.spockframework.mock.runtime.ByteBuddyMockFactory.determineBestClassLoadingStrategy (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)
at net.bytebuddy.TypeCache.findOrInsert (TypeCache.java:138)
Есть какие-нибудь Groovy über-гики там?