One of my mock reference becoming null in main class

Viewed 40

For a reference client mock is prepared and available in test method but when it comes to myMethod the client value becoming null

class MainClass {
    public void myMethod() {
        HttpConnector httpConnector = getHttpConnector(arg);
        CLoseableHttpClient client = httpConnector.getDefaults(input); // client returning null
    }

    private HttpConnector getHttpConnector(String arg) {
        return new HttpConnector(arg)
    }
}

TestClass

@RunWith(PowerMockRunner.class)
class MainClassTest {
    @InjectMocks
    @Spy
    MainClass mainclass;

    public void myMethodTest() {
        HttpConnector httpConnector = Mockito.mock(HttpConnector.class);
        CLoseableHttpClient client = Mockito.mock(CLoseableHttpClient.class);
        Mockito.when(httpConnector.getDefaults(input)).thenReturn(client); // client returning with mock value
        mainclass.myMethod();
    }
}

please help on this if I miss anything or any mistakes in my code?

1 Answers

You can stub the private method getHttpConnector to return a mocked httpConnector

try this

@Test
public void myMethodTest() {
  HttpConnector httpConnector = Mockito.mock(HttpConnector.class);
  CLoseableHttpClient client = Mockito.mock(CLoseableHttpClient.class);
  Mockito.when(httpConnector.getDefaults(anyString())).thenReturn(client); 
  PowerMockito.when(mainclass, "getHttpConnector").thenReturn(httpConnector);
  mainclass.myMethod();
}

Furthermore, I suggest using the newest version Mockito, which is an alternative of Powermock.

Related