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