• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 使用測試優先方法開發用戶界面[4]

    發表于:2010-03-30來源:作者:點擊數: 標簽:開發用戶界面
    使用測試優先方法 開發 用戶界面[4] 軟件測試 void MovieListWindow::OnClickAddButton() { UpdateData(); CString strNewMovieName; m_MovieField.GetWindowText(strNewMovieName); if("" != strNewMovieName) { m_pEditor-Add(strNewMovieName); m_MovieLi

     

      使用測試優先方法開發用戶界面[4]   軟件測試 

         void MovieListWindow::OnClickAddButton()

      {

      UpdateData();

      CString strNewMovieName;

      m_MovieField.GetWindowText(strNewMovieName);

      if("" != strNewMovieName)

      {

      m_pEditor->Add(strNewMovieName);

      m_MovieListBox.AddString(strNewMovieName);

      }

      }

      ??編譯、測試、通過。

      ??5、Mock Objects

      在刪除操作的單元測試中,我們遇到的一個問題是,影片列表的數據應該是保存在一個文本文件或者數據庫當中的,如果我們編寫的測試依賴于這些實際的文件或數據庫,那么我們的測試就會受制于這些外部的資源。一旦文件或者數據庫里的數據發生變化,必然會波及到我們的測試代碼,從而產生錯誤的測試信息。前面的MovieListEditor中我們沒有加入一些初始化的數據,在測試刪除操作時會遇到一些問題 。

      這里,我們引入Mock Objects。Mock Objects用來模擬外部復雜的資源(如數據庫,網絡連接等),使UI可以測試那些依賴于這些復雜外界資源的模塊。例如在測試一個跟數據庫有關系的模塊時,我們并不一定要建立一個真實的數據庫連接,而只需建立一個Mock Objects就可以了。測試所需的數據都存在于這個Mock Objects??梢哉f,Mock Objects為我們提供了一個輕量級的、可控制的、高效的模型。

      在本例中,影片的增加、刪除都會跟文件或數據庫操作發生關系。這時我們就可以利用Mock Objects來隔離測試代碼與文件或數據庫。使用Mock Objects一般有以下幾個步驟:

      ??a)、定義一個外部資源的接口.(這個接口一般是可以在重構過程中提煉出來的)。

      ??b)、定義一個Mock Objects,從外部資源的接口繼承下來,實現外部資源的接口。

      ??c)、創建一個Mock Objects,并設置它的內部期望值。

      [NextPage]

      ??d)、把創建的這個Mock Objects傳遞給需要測試的模塊進行操作。??

      ??e)、操作完畢后將Mock Objects內部的狀態與期待狀態比較。 現在我們就根據這個步驟來實現本例子中的Mock Objects.通過對前面的代碼進行重構,我們可以提煉出一個接口MovieListEditor:

      class AFX_EXT_CLASS MovieListEditor

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>