mercredi 7 septembre 2016

InvalidUseOfMatchersException: while using return method

I am just trying to write unit case with the help of PowerMockito lib. So if i execute void methods its run app without any problem but if i am trying to execute return method then throwing some error. I read a lot regarding same with a lot SO answer but nothing good for me.

Trying to execute below code :-

    @Test
    public void onBindViewHolderTest_verifyImageTextTemplate() {
        UserStory dummy = new UserStory();
        dummy.setTemplateId(UserStoryAdapter.USER_STORY_TEXT_THAN_IMAGE_LAYOUT);
        try {
            PowerMockito.when(userStoryAdapter ,"bindCoverImageData",Matchers.any(UserStoryAdapter.UserStorySingleImageViewHolder.class),Matchers.any(UserStory.class)).thenReturn(Matchers.anyInt());
            PowerMockito.doNothing().when(userStoryAdapter ,"bindCoverImageData",any(UserStoryAdapter.UserStorySingleImageViewHolder.class),any(UserStory.class));
            PowerMockito.doNothing().when(userStoryAdapter ,"bindCommonData",Matchers.any(UserStoryAdapter.UserStorySingleImageViewHolder.class),Matchers.any(UserStory.class));
            userStoryAdapter.onBindViewHolder(null,dummy,0);
            verifyPrivate(userStoryAdapter,times(1)).invoke("bindCommonData",Matchers.any(UserStoryAdapter.UserStorySingleImageViewHolder.class),Matchers.any(UserStory.class));
            verifyPrivate(userStoryAdapter,times(1)).invoke("bindCoverImageData",Matchers.any(UserStoryAdapter.UserStorySingleImageViewHolder.class),Matchers.any(UserStory.class));
        } catch (Exception e) {
//          assert (false);
            e.printStackTrace();
        }
    }

throwing below exception:-

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Misplaced argument matcher detected here:

-> at com.controller.UserStoryAdapterTest.onBindViewHolderTest_verifyImageTextTemplate(UserStoryAdapterTest.java:93)

You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
    when(mock.get(anyInt())).thenReturn(null);
    doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
    verify(mock).someMethod(contains("foo"))

Also, this error might show up because you use argument matchers with methods that cannot be mocked.
Following methods *cannot* be stubbed/verified: final/private/equals()/hashCode().
Mocking methods declared on non-public parent classes is not supported.

    at org.powermock.api.mockito.internal.PowerMockitoCore.doAnswer(PowerMockitoCore.java:36)
    at org.powermock.api.mockito.PowerMockito.doNothing(PowerMockito.java:738)
    at com.controller.UserStoryAdapterTest.onBindViewHolderTest_verifyImageTextTemplate(UserStoryAdapterTest.java:94)
    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:69)
    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)

Java class method:-

private int bindCoverImageData(UserStorySingleImageViewHolder pvh, UserStory json) {
        int index = 0;
        // doing something
        return index;
    }

Aucun commentaire:

Enregistrer un commentaire