У меня есть java класс AgentConverter
, который реализует org.springframework.core.convert.converter.Converter
-
public class AgentConverter implements Converter<RequestWrapper, TicketingAgent> {
public TicketingAgent convert(RequestWrapper wrapper) {
TicketingAgent agent = new TicketingAgent();
....
....
Затем у меня есть java класс, который использует выше AgentConverter
как -
public class BuildTicketingDocumentRequest implements BuildRequest<TicketingDocumentRequest> {
private final PosConverter posConverter;
private final AgentConverter agentConverter; //here it is ..
private final TransactionInfoConverter transactionInfoConverter;
private final BuildRequestComponent<TicketingDocument> buildRequestComponent;
Я написал тестовый пример Groovy, в котором я заменяю класс AgentConverter
-
class ConversionStrategyForDocCreateTest extends EdiSimulator {
def "Master Test for Build Conversion Strategy to create TicketingDocumentRequest"() {
given:"Mocked Classes"
AgentConverter agentConverter = Stub(AgentConverter.class) // this line exception comes
agentConverter.convert(wrapper) >> new TicketingAgent()
.....
.....
Теперь, когда приведенный выше тестовый пример - я получаю:
java.lang.ArrayIndexOutOfBoundsException: 45569
at net.sf.cglib.proxy.BridgeMethodResolver.resolveAll(BridgeMethodResolver.java:61)
at net.sf.cglib.proxy.Enhancer.emitMethods(Enhancer.java:911)
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:498)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:317)
at org.spockframework.mock.runtime.ProxyBasedMockFactory$CglibMockFactory.createMock(ProxyBasedMockFactory.java:91)
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:45)
at org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:281)
at org.spockframework.lang.SpecInternals.StubImpl(SpecInternals.java:131)
at com.sabre.ticketing.hub.converter.startegy.ConversionStrategyForDocCreateMasterTest.Master Test for Build Conversion Strategy to create TicketingDocumentRequest(ConversionStrategyForDocCreateMasterTest.groovy:35)
Во время пробной версии я обнаружил, что если я удалю AgentConverter реализует Converter , как показано ниже -
public class AgentConverter { // Here i have removed "implements Converter"
public TicketingAgent convert(RequestWrapper wrapper) {
TicketingAgent agent = new TicketingAgent();
, то все начнет работать, а java.lang.ArrayIndexOutOfBoundsException
не будет. Я пытаюсь понять, какова связь между Stub()
в структуре Spock И реализацией интерфейса заглушенного класса. Не удалось найти в Google, поэтому здесь размещено ... Любая помощь приветствуется.
Вот мой фрагмент POM для версий spock и groovy:
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>1.0-groovy-2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.4</version>
<scope>test</scope>
</dependency>