Загадочная проблема с последней стабильной версией Groovy - PullRequest
0 голосов
/ 03 ноября 2018

Я только начал новый проект 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-гики там?

1 Ответ

0 голосов
/ 03 ноября 2018

Вам нужно обновить byte-buddy:

testCompile 'net.bytebuddy:byte-buddy:1.8.21'

Версия Спока 1.1-groovy-2.4 зависела от byte-buddy:1.6.5 - https://mvnrepository.com/artifact/org.spockframework/spock-core/1.1-groovy-2.4

Версия Спока 1.2-groovy-2.5 зависит от byte-buddy:1.8.21 - https://mvnrepository.com/artifact/org.spockframework/spock-core/1.2-groovy-2.5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...