我的一个模拟引用在主类中变为空



为参考客户端mock在测试方法中准备好并可用,但是当涉及到myMethod时,客户机值变为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();
}
}
如果我在我的代码中遗漏了任何东西或任何错误,请帮助我?

您可以存根私有方法getHttpConnector以返回模拟的httpConnector

试试这个

@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();
}

此外,我建议使用最新版本的Mockito,它是Powermock的替代品。

最新更新