簡體   English   中英

我的模擬參考之一在主要 class 中變為 null

[英]One of my mock reference becoming null in main class

作為參考,客戶端模擬已准備好並在測試方法中可用,但當涉及到 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)
    }
}

測試類

@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 的替代品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM