[英]Having helper methods in junit class
我想對Class A
進行單元測試,但它依賴於另一個使用user session
方法的類。 我想測試的方法不涉及user session
。 我可以在Class A
可以復制我需要的Class B
方法行為的輔助方法嗎?
我知道它不清楚,讓我們挖掘一些代碼以獲得清晰的理解....
public void testDetails() throws Exception
{
//Some logic that generates DetailsTOList
saveDetailsHelper(DetailsTOList);
int detailsSize = getDetailsSize();
assertNotNull(detailsSize);
}
現在getDetailsSize()
從數據庫中獲取大小信息。 Class B
有這個方法,但我不能創建Class B
對象並測試這個方法,因為Class B
從User獲取會話信息,我可以從JUnit類設置會話信息。
我創建了saveDetailsHelper
方法,它復制了Class B - saveDetails()
行為Class B - saveDetails()
方法,並在testDetails()
方法中調用它,如上所示。
我的問題:
junit class
使用輔助方法嗎? JUnit類的功能與java中的其他類一樣; 歡迎你有輔助功能。 確定是否運行其他函數的唯一因素是(取決於junit的版本)是否有注釋指示線束將其作為測試運行。
但是,這個問題正是您應該仔細設計類的原因。 如果Class B
呼叫數據庫以獲取信息,那么這是划分該功能的絕佳機會。 你沒有澄清'依賴'(你在擴展嗎?),但如果Class B
是A Class B
的一個組件,你可以創建一個完整的存根類,它是Class B
的代表,並返回硬編碼(或以其他方式編碼)專門用於測試A類的數據。只要Class B
代理的簽名相同,您就可以對A類工作有信心。
制作測試類的這些內部類通常很有用,可以防止工作區中的內容過於混亂。
public class testA {
@Test
public void testDetails {
ClassA a = new ClassA();
a.setDependency(new StubClassB());
//run your test
}
private class StubClassB() extends ClassB {
public boolean saveDetails() {
//return fake information;
}
}
}
Helper方法不會有@Testcase注釋。 您可以像編寫任何其他代碼一樣編寫測試代碼,但僅包含相關的測試方法,並僅驗證該測試方法的相關部分。
您可以將幫助器方法放在測試類中,省略Testcase注釋並在需要的地方調用它(如果所有測試都需要,則按方法或在您的設置中進行調整)。 但可能更好的解決方案是使用類似JMock的東西來表示B類並回饋所需的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.