簡體   English   中英

Mockito:在另一個方法中模擬一個方法調用

[英]Mockito: Mock a method call inside another method

所以我試圖在另一個方法中模擬一個方法調用,這是偽代碼

class A{

    public String getAName(String id){
        B b = new B();
        // do something
        return b.getBName(id);
    }
}

testgetName{

    public void testA(){

        B mockB = mock(B.class);        
        Mockito.doReturn("Bar").when(mockB).getBName(id);

        A a = new A();
        a.getAName(id); //this still calls "b.getBName(id)" in class implementation
    }

}

這里的問題是a.getAName仍然調用b.getBName(id) -不知道為什么嗎?

關於如何正確模擬b.getBName(id)任何建議

謝謝

因為您沒有在類A內注入/使用模擬對象。在類A中,您正在創建一個新的B對象。 因此,永遠不會使用模擬對象。 要解決此問題,請將您的A類實現更改為以下內容:

B作為班級成員:

class A{
  B b;

  public String getAName(String id){

    // do something
    return b.getBName(id);
  }
}

然后在您的測試方法中,將模擬對象注入類A中的B成員。請參見下文:

public void testA()(){
    B mockB = mock(B.class);
    Mockito.doReturn("Bar").when(mockB).getBName(id);
    A a = new A();
    a.b = mockB; //add this line to use mock in A
    String testStr = a.getAName(id); //this still calls "b.getBName(id)" in class implementation
    System.out.println(testStr);

}

暫無
暫無

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

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