No methods matching the name(s) getMyHandler were found in the class hierarchy of interface

3,894 views
Skip to first unread message

mike

unread,
Aug 30, 2013, 1:25:11 AM8/30/13
to powe...@googlegroups.com
Hi,

I have tried to do partial mock of a method that is located on the object that I test another method on.

I am using PowerMock ( mockito) 1.5.

Looks something like:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Node.class })
public class NodeTest {

    private MyObjectHandler handlerMock = null;
    private Node partialMock = null;
    private Resource resourceMock = null;
    private Profile profileMock = null;

    @Before
    public void setup() throws Exception {
        resourceMock = mock(Resource.class);
        profileMock = mock(Profile.class);
        handlerMock = mock(MyObjectHandler.class);
        partialMock = spy(new
                Node(resourceMock, profileMock));
       


    }
    
    @Test
    public void myTest() throws Exception {
     PowerMockito.when(partialMock, "getMyHandler").thenReturn(handlerMock);


    }
    
}


I have checked my class Node and it has the following method:

 @Override
    public MyObjectHandler getMyHandler() {
      
    }

I get the following error  (below).

Any ideas?

br,

//mike

org.powermock.reflect.exceptions.MethodNotFoundException: No methods matching the name(s) getMyHandler were found in the class hierarchy of interface org.mockito.internal.util.MockitoSpy.
    at org.powermock.reflect.internal.WhiteboxImpl.getMethods(WhiteboxImpl.java:1902)
    at org.powermock.reflect.internal.WhiteboxImpl.getMethods(WhiteboxImpl.java:1931)
    at org.powermock.reflect.internal.WhiteboxImpl.getBestMethodCandidate(WhiteboxImpl.java:1025)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:89)
    at org.powermock.core.MockGateway.methodCall(MockGateway.java:168)
    at company.Node.getMyHandler(Node.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:2014)
    at org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:885)
    at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:713)
    at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:401)
    at org.powermock.api.mockito.PowerMockito.when(PowerMockito.java:426)
    at company.NodeTest.myTest(NodeTest.java:89)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:312)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:296)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit49RunnerDelegateImpl$PowerMockJUnit49MethodRunner.executeTestInSuper(PowerMockJUnit49RunnerDelegateImpl.java:116)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit49RunnerDelegateImpl$PowerMockJUnit49MethodRunner.executeTest(PowerMockJUnit49RunnerDelegateImpl.java:77)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:284)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:209)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:148)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:122)
    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:120)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:101)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
    at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Johan Haleby

unread,
Aug 30, 2013, 1:53:34 AM8/30/13
to powe...@googlegroups.com
Hmm I think it ought to work but you could also try replacing

PowerMockito.when(partialMock, "getMyHandler").thenReturn(handlerMock);
with:
PowerMockito.doReturn(handlerMock).when(partialMock, "getMyHandler");

and see if you get the same error. Also try upgrading to PowerMock 1.5.1.

Regards,
/Johan




--
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/groups/opt_out.

mike

unread,
Aug 30, 2013, 3:03:45 AM8/30/13
to powe...@googlegroups.com
Hi,

I tried to change to:

PowerMockito.doReturn(
handlerMock).when(partialMock, "getMyHandler");

but then I get a NullPointer ( see below).

java.lang.NullPointerException
    at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:67)
    at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.prepareForStubbing(PowerMockitoStubberImpl.java:124)
    at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:92)
    at company.NodeTest.myTest(NodeTest.java:90)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)

I also upgraded to 1.5.1 and I still get the same error.

br,

//mike

Johan Haleby

unread,
Aug 30, 2013, 3:54:02 AM8/30/13
to powe...@googlegroups.com
Ok thanks for trying it out. I'll see if you can find some time to reproduce (and possibly fix) it during the weekend.

mike

unread,
Aug 30, 2013, 4:22:25 AM8/30/13
to powe...@googlegroups.com
ok. Let me know if you need more input.

//mike

Johan Haleby

unread,
Aug 31, 2013, 9:44:41 AM8/31/13
to powe...@googlegroups.com
Ok so I think the problem is that you're using the wrong spy method (the one from Mockito). You must use PowerMock.spy(..) when spying using the PowerMock API.


On Fri, Aug 30, 2013 at 10:22 AM, mike <mikaelpe...@gmail.com> wrote:
ok. Let me know if you need more input.

//mike

--

mike

unread,
Sep 2, 2013, 3:17:16 AM9/2/13
to powe...@googlegroups.com
Thanks for looking into it. Yes that was the issue.

br,

//mike

Tiecong Li

unread,
Nov 20, 2014, 5:17:51 PM11/20/14
to powe...@googlegroups.com
Do you mean using the PowerMockito.spy() fixed the issue? 

mike

unread,
Nov 21, 2014, 4:13:32 AM11/21/14
to powe...@googlegroups.com
Hi

Yes it fixad mycket problem.
Br,
Mike
Reply all
Reply to author
Forward
0 new messages