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

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

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

    發表于:2016-06-01來源:不詳作者:Omar Al Zabir點擊數: 標簽:單元測試
    }); } 這個試驗是很簡單的。唯一的區別是在設置Context ,我們設定一個期望,從緩存請求特定的頁面時,它將返回samplePage對象。只要其中任何被調用函數中

      });

      }

      這個試驗是很簡單的。唯一的區別是在設置Context ,我們設定一個期望,從緩存請求特定的頁面時,它將返回samplePage對象。只要其中任何被調用函數中有沒有期望設置,Mock將拋出一個異常。如果代碼試圖調用任何database對象或任何東西上的其他cache對象時,它會拋出一個異常,從而表明它沒有做什么不應該做的。

      集成測試使用BDD

      集成測試意味著你要測試的一些類,它與其它類和基礎設施集成,如數據庫,文件系統,郵件服務器等,當你寫一個集成測試,測試組件的行為應該是沒有任何實物模型。此外,它們提供額外的信心代碼工作,因為所有必需的組件和依賴關系也被測試。

      如何測試業務外觀層,業務外觀處理數據訪問組件和所有其他實用程序組件的編排。它封裝了用戶操作為一體的商業運作。例如,在Dropthings ,當第一次全新的用戶訪問,用戶獲得創建默認的頁面和窗口小部件。這些頁面和小部件來自一個模板。有一個名為anon_user@dropthings.com的用戶擁有默認的頁面和窗口小部件。特定用戶的頁面和窗口小部件被復制到每一個新用戶中。由于這是一個復雜的操作,適合做自動化的集成測試。

      當用戶首次訪問該Default.aspx,該FirstVisitHomePage是呼吁Facade。它通過一個復雜的過程來克隆模板頁面、小部件和設置默認用戶設置等集成測試,將確保如果FirstVisitHomePage被調用參數標識一個新的用戶訪問的站點,那么它將返回可以對用戶創建的默認頁面和部件的一個對象。因此: 由于之前從來沒有誰訪問過該網站的匿名用戶, 當用戶第一次訪問, 然后在準確的列和位置作為anon_user的網頁新創建的頁面創建的小部件。

      public class TestUserVisit

      {

      public TestUserVisit()

      {

      Facade.BootStrap();

      }

      ///

      /// Ensure the first visit produces the pages and widgets defined in the template user

      ///

      [Specification]

      public void First_visit_should_create_same_pages_and_widgets_as_the_template_user()

      {

      MembershipHelper.UsingNewAnonUser((profile) =>

      {

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

      {

      UserSetup userVisitModel = null;

      // Load the anonymous user pages and widgets

      string anonUserName = facade.GetUserSettingTemplate()

      .AnonUserSettingTemplate.UserName;

      var anonPages = facade.GetPagesOfUser(facade.GetUserGuidFromUserName(anonUserName));

      "Given anonymous user who has never visited the site before"

      .Context(() => { });

      "when the user visits for the first time".Do(() =>

      {

      userVisitModel = facade.FirstVisitHomePage(profile.UserName,

      string.Empty, true, false);

      });

      "it creates widgets on the newly created page at exact columns and

      positions as the anon user's pages".Assert(() =>

      {

      anonPages.Each(anonPage =>

      {

      var userPage = userVisitModel.UserPages.First(page =>

      page.Title == anonPage.Title

      && page.OrderNo == anonPage.OrderNo

      && page.PageType == anonPage.PageType);

      facade.GetColumnsInPage(anonPage.ID).Each(anonColumn =>

      {

      var userColumns = facade.GetColumnsInPage(userPage.ID);

      var userColumn = userColumns.First(column =>

      column.ColumnNo == anonColumn.ColumnNo);

      var anonColumnWidgets =

      facade.GetWidgetInstancesInZoneWithWidget(anonColumn.WidgetZoneId);

      var userColumnWidgets =

      facade.GetWidgetInstancesInZoneWithWidget(userColumn.WidgetZoneId);

      // Ensure the widgets from the anonymous user template's columns are

      // in the same column and row.

      anonColumnWidgets.Each(anonWidget =>

      Assert.True(userColumnWidgets.Where(userWidget =>

      userWidget.Title == anonWidget.Title

      && userWidget.Expanded == anonWidget.Expanded

      && userWidget.State == anonWidget.State

      && userWidget.Resized == anonWidget.Resized

      && userWidget.Height == anonWidget.Height

      && userWidget.OrderNo == anonWidget.OrderNo).Count() == 1));

    原文轉自: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>