Runtime Exception Mocking groovy.sql в Спок

Я некоторое время обыскивал Stackru и Google, пытаясь найти правильную конфигурацию / синтаксис для возможности запуска этого кода в спецификации Spock:

Sql mockSql = Mock()

Однако, когда я запускаю юнит-тест, CGLIB бросает мне в лицо неприятное исключение:

java.lang.IllegalAccessError: tried to access method groovy.sql.Sql.<init>()V from class groovy.sql.Sql$$EnhancerByCGLIB$$d0b7cd7f
at org.spockframework.mock.runtime.MockInstantiator.instantiate(MockInstantiator.java:33)
at org.spockframework.mock.runtime.ProxyBasedMockFactory$CglibMockFactory.createMock(ProxyBasedMockFactory.java:92)
at org.spockframework.mock.runtime.ProxyBasedMockFactory.create(ProxyBasedMockFactory.java:49)
at org.spockframework.mock.runtime.JavaMockFactory.create(JavaMockFactory.java:51)
at org.spockframework.mock.runtime.CompositeMockFactory.create(CompositeMockFactory.java:44)
at org.spockframework.lang.SpecInternals.createMock(SpecInternals.java:47)
at org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:282)
at org.spockframework.lang.SpecInternals.MockImpl(SpecInternals.java:83)

Я посмотрел на этот вопрос / ответ - статический метод Mock с GroovyMock или аналогичный в Spock, - надеясь, что он может дать мне хорошую отправную точку, но в моем случае класс, в котором используется насмешка, - groovy.Sql - классный класс, поэтому я не уверен, что это правильное место для начала.

Я успешно протестировал Groovy.Sql в других модульных тестах с использованием GroovyMock, но я надеялся, что, может быть, я просто упустил что-то, что могло бы сделать так, чтобы у меня была возможность совместить магию Спока и Groovy SQL. Мои извинения, если я просто где-то пропустил ответ - надеюсь, я не повторю чужой запрос.

1 ответ

Решение

При манипулировании классами (а не интерфейсами) со Spock рекомендуется помещать objenesis-1.2 или выше в путь класса времени выполнения теста (в дополнение к CGLIB) . В противном случае Спок не сможет избежать выполнения конструктора класса, который должен быть подвергнут насмешке, что может иметь нежелательные побочные эффекты.

Другие вопросы по тегам