簡體   English   中英

JUnit - 測試方法中使用的模擬類

[英]JUnit - Mocking class used in tested methods

兩個類:

class A{
  public int getValue(){
    return 5;
  }
}

class B{
  public int getValue(){
    A a = new A();
    return a.getValue();
  }
}

現在我想為B類編寫測試,但我想為該測試模擬A類 問題是:如何?

(這個片段只是我問題的一個更簡單的版本,請不要小心返回5或smth)

可能有一些棘手的方法,但簡而言之,你寫B的方式不利於嘲笑。 而不是在B中實例化A,嘗試將A注入B

考慮將其更改為

class B {
  private A a;
  public void setA(A a) {
    this.a=a;
  }
  public int getValue(){
    return a.getValue();
  }
}

你甚至可以初始化aprivate A a = new A()但提供了一個二傳手讓你注入用於測試的模擬。


編輯:如果在重寫B以使其單元測試友好時遇到困難,您仍然可以使用將執行字節碼操作的模擬框架,如Powermock。 以下是實現您想要的內容的示例:

http://code.google.com/p/powermock/wiki/MockConstructor

模擬可以使用instance variable完成,並具有相同的setter

以下兩個鏈接可能會幫助您完成上述嘗試

JUnit使用Mockito,EasyMock等 進行模擬如何在java中模擬局部變量?

模擬類用於獲取測試其他類功能所需的數據。 在這種情況下,沒有使用類A的mock類,因為它只返回5.但是如果它是類A中的業務邏輯,則應該使用mock類。 創建一個新類並在原始類中添加相同的方法名稱,而不執行任何邏輯只是從那里返回一些值。

暫無
暫無

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

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