[英]Mock call super method - protected
我的問題是我想用超級調用方法來模擬B類,因為我不需要在那里測試super.doSomething()。
public class A{
protected void doSomething(){
//some Code
}
}
public class B extends A{
@Override
protected void doSomething(){
//some Code
super.doSomething();
}
}
怎么做?
這是不可能的。
嘗試使用合成而不是繼承來使測試正常工作。
我的意思是,如果可能,請執行以下操作:
public class B extends A{
//notice the composition of class A into class B
private A a;
........
@Override
protected void doSomething(){
//some Code
a.doSomething();
}
......
}
在這里,您可以輕松地在測試中模擬a
。
如果這不是您的選擇,那么您將必須模擬super.doSomething()
方法中的所有內容。 而且powermockito
也可能派上用場。
你為什么還要做這樣的事情?
它給您的保證是: B.doSomething()的行為正確, 只要A.doSomething()永不更改,並且A永遠保持B的超類 。
您的目標是確定A
和B
的實現嗎? 單元測試的目標通常是相反的-鼓勵重構。 在您的情況下:
A.doSomething()
方式修改A.doSomething()
,則您的測試仍將通過,( 誤報 ) B.doSomething()
到A.doSomething()
提取一行代碼(這不太可能,因為他們已經面向代碼重用),那么測試很可能會失敗( 錯誤的否定 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.