簡體   English   中英

在junit類中有輔助方法

[英]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()方法中調用它,如上所示。

我的問題:

  1. 我們可以在junit class使用輔助方法嗎?
  2. 處理這種情況的最佳方法是什么?

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.

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