Howto spy a Selma mapper ?

105 views
Skip to first unread message

richet....@gmail.com

unread,
Sep 10, 2019, 4:58:16 AM9/10/19
to Selma
Hi all,

Please accept a newbie on SELMA mapping framework, ;-)

# Just a brief summary of my constraints :
  • on my API, we are yet mocking with Mockito 1 on my API, so not way to mock/spy final or static methods/class
    (we have planned to upgrade to Mockito 2 later)

  • So we used PowerMock for that purpose

# The need :
  • I would like to spy with PowerMock a Selma mapper (in a test on a Spring Controller with that mapper in dependency)

# The code :

# mapper
/**
 * A Selma mapper for beans mappings concerning SelfService endpoints
 * ...
 */
@Mapper(withIoC = IoC.SPRING, withIoCServiceName = "selfServiceMapper")
public abstract class SelfServiceMapper {
 
    /**
     * Gets the UI mapping of core SelfService object
     * 
     * @param coreSelfService core SelfService object
     * @return its UI mapping
     */
    public abstract UISelfService asUI(SelfService coreSelfService);
}

 
# Test 
[...]
private SelfServiceMapper mapper;
 
@InjectMocks
private SelfServiceController controller;
 
@Before
public void setup() {
mapper = PowerMockito.spy(Selma.mapper(SelfServiceMapper.class));
}
[...]
 

But it fails with error :

java.lang.IllegalArgumentException: Cannot subclass final class class com.afklm.hapi.complaint.mapper.SelfServiceMapperSelmaGeneratedClass
at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
at org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass(ClassImposterizer.java:123)
at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:57)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
[...]

Any idea ?
How can i spy a Selma mapper ?

Thanks a lot in advance for any suggestion
Best regards
 
Message has been deleted
Message has been deleted

richet....@gmail.com

unread,
Sep 10, 2019, 7:40:31 AM9/10/19
to Selma
... and if i reference the generated class @PrepareForTest annotation :

# Test
[...]
@RunWith(PowerMockRunner.class)
@PrepareForTest(SelfServiceMapperSelmaGeneratedClass.class)
public class SelfServiceControllerITTest ...

[...]
private SelfServiceMapper mapper;
@InjectMocks
private SelfServiceController controller;
@Before
public void setup() {
mapper = PowerMockito.spy(Selma.mapper(SelfServiceMapper.class));
}
[...]

 
It fails now with error :
java.lang.IllegalArgumentException: Mapper class com.afklm.hapi.complaint.mapper.SelfServiceMapperSelmaGeneratedClass should have 1 constructor !
at fr.xebia.extras.selma.Selma.createMapperInstance(Selma.java:189)
at fr.xebia.extras.selma.Selma.getMapper(Selma.java:158)
at fr.xebia.extras.selma.Selma.getMapper(Selma.java:141)
at fr.xebia.extras.selma.Selma.mapper(Selma.java:85)

Reply all
Reply to author
Forward
0 new messages