Sto provando a prendere in giro un metodo privato con mockito/powermock. Ottengo NullPointerException
Il semplice esempio che sto cercando di fare è:Ottieni java.lang.NullPointerException quando provi a prendere in giro il metodo privato con mockito e powermock
classe reale
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";
}
}
Classe di prova:
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);
}
}
Quando provo a fare funzionare questo ho a NullPointerException
: qualsiasi suggerimento che risolva questo o qualsiasi altro modo di deridere un metodo privato. Non voglio usare il suggerimento dato per rendere il metodo protetto che significa cambiare il metodo attuale. Non voglio alcuna modifica l'attuale
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)
ho dato la NullPointerException: semplicemente aggiungendo PowerMockito al metodo spia. 'MockitoBusinessOperation = PowerMockito.spy (MockitoBusinessOperation);' Ora il problema è prendere in giro il metodo privato anche se ho preso in giro il metodo privato ma sta ancora ricevendo una chiamata. [In un altro post] (http://stackoverflow.com/questions/8057607/when-mocking-private-method-with-powermock-but-underlying-method-still-gets-cal?rq=1) qualcuno ha postato questo problema. ma la soluzione non sta funzionando per me. qualsiasi suggerimento perché la finta non viene riflessa come suppone di essere. – jan
Stai usando lo stile di scrittura doWhen()? Puoi pubblicare un nuovo esempio di codice o modificare la tua domanda? –