自動化元件測試

broadviewbj發表於2012-06-18

自動化元件測試

“元件測試”或“子系統測試”驗證系統的各個部分,可能需要安裝整個系統或某些外部依賴關係,如資料庫、檔案系統或網路終端等。這些測試驗證元件間的互動能產生預期的組合行為。典型的元件測試需要底層資料庫支援,甚至可能跨越架構邊界。因為每個測試用例執行的程式碼量更大,每個測試的程式碼覆蓋率也更大,所以這些測試一般比單元測試執行的時間長。

程式碼清單6-3展示了一個元件測試的例子,它利用DbUnit框架來生成資料庫中的基底資料,然後嘗試基於資料庫中的內容找到資料。DbUnit使用了一些XML檔案,它讀入這些檔案並將對應的資料插入到匹配的資料庫表中。

程式碼清單6-3  使用DbUnit的元件測試

public class DefaultWordDAOImplTest extends DatabaseTestCase {

    protected IDataSet getDataSet() throws Exception {

        return new FlatXmlDataSet(new File("test/conf/wseed. xml"));

    }

 

    protected IDatabaseConnection getConnection() throws Exception {

        final Class driverClass =

               Class.forName("org.gjt.mm.mysql.Driver");

        final Connection jdbcConnection =

        DriverManager.getConnection(

            "jdbc:mysql://localhost/words",

            "words", "words");

         return new DatabaseConnection(jdbcConnection);

    }

 

    public void testFindVerifyDefinition() throws Exception{

        final WordDAOImpl dao = new WordDAOImpl();

        final IWord wrd = dao.findWord("pugnacious");

        for(Iterator iter =

               wrd.getDefinitions().iterator();

                                     iter.hasNext();){

            IDefinition def = (IDefinition)iter.next();

            TestCase.assertEquals(

                  "def is not Combative in nature; belligerent.",

                  "Combative in nature; belligerent.",

                  def.getDefinition());

        }

    }

    public DefaultWordDAOImplTest(String name) {

        super(name);

    }

}

元件級的測試比單元測試用到更多的依賴關係,但不一定像更高階的系統測試(稍後定義)用到的那麼多。元件級的測試透過API來執行程式碼,但這些API可能暴露給客戶,也可能不暴露給客戶。在程式碼清單6-3中,主要透過暴露出的介面測試了資料訪問物件(DAO)層的一個物件。另一個元件測試的例子透過StrutsTestCase框架測試了Struts架構中一個動作類,如程式碼清單6-4所示。這個測試明顯需要一個資料庫才能執行,但Web容器則是虛擬的,執行的API也不必暴露給客戶。

程式碼清單6-4  使用StrutsTest的元件測試

public class ProjectViewActionTest extends DeftMeinMockStrutsTestCase {

   public void testProjectViewAction() throws Exception {

      this.addRequestParameter("projectId", "100");

      this.setRequestPathInfo("/viewProjectHistory");

      this.actionPerform();

      this.verifyForward("success");

 

        Project project = (Project)this.getRequest()

          .getAttribute("project");

            assertNotNull(project);

            assertEquals(project.getName(), "DS");

  }

 

  protected String getDBUnitDataSetFileForSetUp() {

      return "dbunit-seed.xml";

  }

 

  public ProjectViewActionTest(String name) {

      super(name);

  }

}

在程式碼清單6-4中,StrutsTestCase框架與DbUnit一起提供了向資料庫填充基底資料的功能和一個虛擬的容器。DeftMeinMockStrutsTestCase類是一個模板,它要求實現getDBUnitDataSetFileForSetUp方法。

這種型別的測試也被稱為“整合測試”。這種型別的測試與系統測試的不同之處在於,整合測試(或元件測試、子系統測試)並不總是執行那些期望公開的API。例如,系統測試可以透過Web應用程式的Web頁面執行它,但元件測試可以執行應用程式Web頁面底下的業務層。

 自動化元件測試

本文節選自《持續整合:軟體質量改進和風險降低之道》一書

圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-732714

[]Paul M. Duvall (保羅.M. 杜瓦爾)Steve Matyas (史蒂夫.邁耶斯) Andrew Glover(安德魯.格洛弗

王海鵬 

電子工業出版社出版

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-733185/,如需轉載,請註明出處,否則將追究法律責任。

相關文章