PowerMockito.whenNew and assignment to a local variable

1,859 views
Skip to first unread message

ron.difrango

unread,
Nov 10, 2015, 1:17:06 PM11/10/15
to PowerMock
I'm attempting to use PowerMockito.whenNew and when I attempt to assign it to an local variable I get the following error:

java.lang.ClassCastException: org.powermock.core.spi.support.InvocationSubstitute$$EnhancerByMockitoWithCGLIB$$b9bc6977 cannot be cast to java.io.BufferedInputStream

at com.capitalone.chassis.engine.content.runtime.ContentServiceImplTest.getRenditionObjectFromDocumentTest(ContentServiceImplTest.java:501)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:310)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

My code looks like the following:

@RunWith(PowerMockRunner.class)
@PowerMockIgnore( {"javax.management.*"})
@PrepareForTest({RequestContextHolder.class, ContentServiceImpl.class, IOUtils.class,
NodeModel.
class, BufferedInputStream.class, ObjectInputStream.class})
...

//
// This line fails
//
BufferedInputStream mockBufferedInputStream = PowerMockito.
whenNew(BufferedInputStream.class)
        .withArguments(inputStreamMock).thenReturn(PowerMockito.mock(BufferedInputStream.class)).getMock();

ObjectInputStream mockObjectInputStream = PowerMockito.whenNew(ObjectInputStream.class)
.withArguments(mockBufferedInputStream).thenReturn(PowerMockito.mock(ObjectInputStream.class)).getMock();

given((mockObjectInputStream).readObject()).willReturn(mockObject);

I'm using:

Mockito version 2.0.5-beta
PowerMockit version 1.6.2

KARR, DAVID

unread,
Nov 16, 2015, 7:17:45 PM11/16/15
to powe...@googlegroups.com

I could be mistaken, but assigning the return from “whenNew()” and similar clauses to variables doesn’t make sense.  What is it you think that’s doing?

 

--
You received this message because you are subscribed to the Google Groups "PowerMock" group.
To unsubscribe from this group and stop receiving emails from it, send an email to powermock+...@googlegroups.com.
To post to this group, send email to powe...@googlegroups.com.
Visit this group at http://groups.google.com/group/powermock.
For more options, visit https://groups.google.com/d/optout.

ron.difrango

unread,
Nov 17, 2015, 10:12:46 AM11/17/15
to PowerMock
As my code above showed, I need the value returned from the NEW for two purposes:
  1. The first call I need the MOCK value as its input the 2nd one.
  2. The second call, I need the MOCK value as an operation is called upon it.
Here is the code again:

BufferedInputStream mockBufferedInputStream = PowerMockito.whenNew(BufferedInputStream.class)
        .withArguments(inputStreamMock).thenReturn(PowerMockito.mock(BufferedInputStream.class)).getMock();

ObjectInputStream mockObjectInputStream = PowerMockito.whenNew(ObjectInputStream.class)
       
.withArguments(mockBufferedInputStream).thenReturn(PowerMockito.mock(ObjectInputStream.class)).getMock();

given((mockObjectInputStream).readObject()).willReturn(mockObject);

If there is an alternative to this, I'm open to other options, but I will say this worked previously with EasyMock, its just when I was switching over to Mockito that this came up.
Reply all
Reply to author
Forward
0 new messages