I am trying to make fun of a private method with mockito / powermock. I get a NullpointerException
A simple example I'm trying to do is:
Actual class
import com.siriusforce.plugin.common.PluginSystem; import com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessService; public class MockitoBusinessOperationImpl implements MockitoBusinessOperation{ private MockitoBusinessService mockitoBusinessService = PluginSystem.INSTANCE.getPluginInjector().getInstance(MockitoBusinessService.class); private Long Id; public String creditAproved( Long Id){ System.out.println("Came Inside MockitoBusinessOperationImpl"); this.Id = Id; if (this.Id != null){ System.out.println("Inside creditaproved If statement"); String Report = mockitoBusinessService.creditReport(this.Id); System.out.println("Mock Object Injected from test class "+ Report); return Report; } else return "Went to Else Part"; } private String inTestMethod(Long Id){ return "this is working"; } }
Testing Class:
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import static org.powermock.api.mockito.PowerMockito.doReturn; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.powermock.core.classloader.annotations.PrepareForTest; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.siriusforce.plugin.common.PluginSystem; public class MockitoBusinessServiceTest { @Mock MockitoBusinessService MockitoBusinessService ; @InjectMocks private MockitoBusinessOperation MockitoBusinessOperation = PluginSystem.INSTANCE.getPluginInjector().getInstance(MockitoBusinessOperation.class); private Long Id; @BeforeMethod public void init() { MockitoAnnotations.initMocks(this); this.Id = 123L; } @PrepareForTest(MockitoBusinessOperation.class) @Test(enabled = true) public void testReCalculatePrepaids() throws Exception { MockitoBusinessOperation = spy(MockitoBusinessOperation); doReturn("this will work hopefully").when(MockitoBusinessOperation, "inTestMethod", this.Id); when(MockitoBusinessService.creditReport(this.Id)).thenReturn(new String("Decline by only Me")); String mainReport = MockitoBusinessOperation.creditAproved(this.Id); System.out.println("Indirect Call from actual class MainReport " + mainReport); } }
When I try to run this, I get a NullPointerException : any suggestion allowing this or any other way to mock a personal method. I do not want to use the sentence given to protect the method, which means changing the actual method. I do not want any changes in the actual
class method <failure type="java.lang.NullPointerException">java.lang.NullPointerException at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:68) at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.prepareForStubbing(PowerMockitoStubberImpl.java:123) at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:91) at com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessServiceTest.testReCalculatePrepaids(MockitoBusinessServiceTest.java:54)
source share