[英]What should be checked in junit for a method that simply calls super.method()?
我有一個junit方法 ,只調用super.method()
。
在此方法的junit中應該聲明什么。
public String foo()
{
return super.foo();
}
斷言super.foo()
得到足夠的調用。
或者,我也應該比較這些值。
這是一個有趣的問題,我懷疑如果沒有更多上下文和對此代碼的重要性的理解,就可以回答。
如果您想支持隔離測試,那么我想說的是這里沒有什么可以測試的。 相反,我將確保在超類的測試類中對super.foo()
進行了良好的測試。 這種方法的優勢意味着,如果超類的行為發生變化,則單元測試僅需要在一個地方進行更新。
但是,如果此行為有很強的商業原因,那么也可以在此處測試該實現是否有意義。 通過在單元測試中仔細地重用代碼,可以最大程度地減少維護方面的麻煩。
本質上,選擇什么以及如何測試此方法歸結為覆蓋范圍的完整性和持續維護成本之間的平衡。
不要測試實現 :測試行為 。 即,當您調用foo()
方法時,它是否可以執行應做的工作?
除非調用super.foo()
是子類foo()
方法的協定的一部分,這幾乎是代碼的味道,但是有些測試框架可以明確斷言是否調用了某些方法。 Spock是我的最愛(不確定語法,因為我不必斷言對super的調用...盡管有傳聞,也有代碼氣味的證據。如果您的方法僅調用super.foo()
,請將其刪除並讓類型層次結構為您完成。
如果僅調用super方法是該方法要做的事情,則不必首先創建該方法。 無論這是什么類,都繼承超類的所有方法,這意味着您可以調用foo()
而不重寫它。
如果不是唯一的事情,則可以聲明與在super方法的junit測試中聲明的內容相同的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.