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

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

  • <strong id="5koa6"></strong>
  • 單元測試和集成測試業務應用程序(5)

    發表于:2016-06-01來源:不詳作者:Omar Al Zabir點擊數: 標簽:單元測試
    現在添加真正的代碼: public Page Insert(Action populate) { var newPage = _database.Insert( DropthingsDataContext.SubsystemEnum.Page, populate); RemoveUserPagesCollection(newPage.UserId); ret

      現在添加真正的代碼:

      public Page Insert(Action populate)

      {

      var newPage = _database.Insert(

      DropthingsDataContext.SubsystemEnum.Page, populate);

      RemoveUserPagesCollection(newPage.UserId);

      return newPage.Detach();

      }

      現在,當單元測試是對的PageRepository ,它通過新的測試,與以往的測試一起:

      使用BDD進行集成測試測試驅動開發

      如果我們想為集成測試做TDD?我們如何先寫測試代碼,然后寫它與其他組件集成業務層的代碼? 我們如何為Web層做TDD?方法是一樣的,首先你編寫測試代碼,給出正確的輸入,并期望從中活得輸出,然而,集成測試不應該只調用單獨一個業務操作,以確保它能正常工作。集成測試還應該確保執行其它操作時出現正確的行為。例如,在測試FirstVisitHomePage 時,期望的是,第一次訪問之后,用戶具有創建的正確頁面。測試代碼通過檢查返回的對象模型驗證這一點,但實際情況是,在第一次訪問后,根據用戶的返回,他們應該看到相同的部件,再次確認第一和復診返回相同的數據。

      測試如下:

      public void Revisit_should_load_the_pages_and_widgets_exactly_the_same()

      {

      MembershipHelper.UsingNewAnonUser((profile) =>

      {

      using (var facade = new Facade(new AppContext(string.Empty, profile.UserName)))

      {

      UserSetup userVisitModel = null;

      UserSetup userRevisitModel = null;

      "Given an anonymous user who visited first".Context(() =>

      {

      userVisitModel = facade.FirstVisitHomePage(profile.UserName, ...);

      });

      "when the same user visits again".Do(() =>

      {

      userRevisitModel = facade.RepeatVisitHomePage(profile.UserName, ...);

      });

      "it should load the exact same pages, column and

      widgets as the first visit produced".Assert(() =>

      {

      userVisitModel.UserPages.Each(firstVisitPage =>

      {

      Assert.True(userRevisitModel.UserPages.Exists(page =>

      page.ID == firstVisitPage.ID));

      var revisitPage = userRevisitModel.UserPages.First(page =>

      page.ID == firstVisitPage.ID);

      var revisitPageColumns = facade.GetColumnsInPage(revisitPage.ID);

      facade.GetColumnsInPage(firstVisitPage.ID).Each(firstVisitColumn =>

      {

      var revisitColumn = revisitPageColumns.First(column =>

      column.ID == firstVisitColumn.ID);

      var firstVisitWidgets = facade

      .GetWidgetInstancesInZoneWithWidget(firstVisitColumn.WidgetZoneId);

      var revisitWidgets = facade

      .GetWidgetInstancesInZoneWithWidget(revisitColumn.WidgetZoneId);

      firstVisitWidgets.Each(firstVisitWidget =>

      Assert.True(revisitWidgets.Where(revisitWidget =>

      revisitWidget.Id == firstVisitWidget.Id).Count() == 1));

      });

      });

      });

      }

      });

      }

      做集成測試的正確方法是編寫單元測試的對立面。在單元測試中,這種方法是通過調用一種方法和存根。在集成測試,你應該測試不僅只有一個操作,而且還執行其它相關操作,以確保測試的操作確實是它應該做的。概括了可能的測試用例分為以下類別:

      當測試創建新數據操作(例如,在數據庫中插入行或調用Web服務來創建一個實體),保證了操作通過適當進行:

      調用,通過再次讀取該行或調用另一個Web服務,以獲得創建的實體讀取數據等操作。如果數據沒有被正確插入(例如,插入子行)應該失敗。 這是一個積極的測試。

      調用如果插入成功,例如再次插入同一行會產生一個違反約束,將失敗的其它操作。這是一種消極的考驗。

      當測試的操作的更新數據(例如,更新數據庫中的行),保證了操作的數據,通過適當更新

      調用使用更新后的數據,如果沒有正確的更新數據會失敗,例如其它的操作使余額不足的賬戶兩次連續的匯款后。這是一個積極的測試。

      如果調用更新成功,將是失敗的其它操作,例如嘗試使用更新后的相同值約束沖突在數據庫中插入新行。這是一種消極的考驗。

    原文轉自:http://www.codeproject.com/Articles/44276/Unit-Testing-and-Integration-Testing-in-Business-A

    老湿亚洲永久精品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>