[英]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();
}
}
你甚至可以初始化a
由private A a = new A()
但提供了一個二傳手讓你注入用於測試的模擬。
編輯:如果在重寫B以使其單元測試友好時遇到困難,您仍然可以使用將執行字節碼操作的模擬框架,如Powermock。 以下是實現您想要的內容的示例:
模擬可以使用instance variable
完成,並具有相同的setter
。
以下兩個鏈接可能會幫助您完成上述嘗試
模擬類用於獲取測試其他類功能所需的數據。 在這種情況下,沒有使用類A的mock類,因為它只返回5.但是如果它是類A中的業務邏輯,則應該使用mock類。 創建一個新類並在原始類中添加相同的方法名稱,而不執行任何邏輯只是從那里返回一些值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.