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

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

  • <strong id="5koa6"></strong>
  • 自動化測試的分層結構(2)

    發表于:2014-12-17來源:uml.org.cn作者:李貝點擊數: 標簽:自動化測試
    ACCOUNT_INFORMATION_SHOULD_BE_RETURNED_ACTION) .Given(AN_ACCOUNT_WITH_PHONE_NUMBER, 01062736745) .When(SEARCH_WITH, 01062736745) .Then(ACCOUNT_INFORMATION_SHOULD_BE_RETURNED, 12666056628); } [Scenario

      ACCOUNT_INFORMATION_SHOULD_BE_RETURNED_ACTION)

      .Given(AN_ACCOUNT_WITH_PHONE_NUMBER, "01062736745")

      .When(SEARCH_WITH, "01062736745")

      .Then(ACCOUNT_INFORMATION_SHOULD_BE_RETURNED, "12666056628");

      }

      [Scenario]

      public void SearchWithPartialPhoneNumber()

      {

      story.WithScenario("Search with partial phone number")

      .Given(THREE_ACCOUNTS_WITH_PHONE_NUMBER_STARTS_WITH, "0106", EMPTY_ACTION)

      .When(SEARCH_WITH, "0106", SEARCH_WITH_ACTION)

      .Then(ACCOUNT_INFORMATION_SHOULD_BE_RETURNED, "13120205504",

      ACCOUNT_INFORMATION_SHOULD_BE_RETURNED_ACTION)

      .And(ACCOUNT_INFORMATION_SHOULD_BE_RETURNED, "12666056628")

      .And(ACCOUNT_INFORMATION_SHOULD_BE_RETURNED, "17948552843");

      }

      [Scenario]

      public void SearchWithAPhoneNumberWhichHasSeveralExactMatches() {...}

      [Scenario]

      public void SearchWithNonExistentPhoneNumbers() {...}

      [Scenario]

      public void SearchWithInvalidPhoneNumberValues() {...}

      ...

      ...

      }

      這些測試用例用C#寫成,但是很接近英語,即使非技術人員也可以讀懂。 (請參照Martin Fowler的 BusinessReadableDSL )。這樣,其他的團隊成員,特別是對領域更熟悉的業務人員,可以很容易的讀懂測試用例, 因此也更可能指出測試中遺漏的案例及場景。

      若采用支持以自然語言形式書寫測試用例的框架(例如Ruby平臺下的Cucumber)則會更好。

      以"ACTION"結尾的變量為lambda表達式。他們是真正的測試邏輯。

      SEARCH_WITH_ACTION會向web服務發出請求,并會解析返回的以豎線分割的數據。類CustomerService和Subscriber在領域層中,他們 會在多個測試中重復使用。

      SEARCH_WITH_ACTION =

      phoneNumber =>

      {

      subscribers = customerService.SearchWithTelephoneNumber(phoneNumber);

      };

      ACCOUNT_INFORMATION_SHOULD_BE_RETURNED_ACTION is for verifying the data

      ACCOUNT_INFORMATION_SHOULD_BE_RETURNED_ACTION =

      accountNumber =>

      {

      //Get expected subscriber from fixture

      Subscriber expected = SubscriberFixture.Get(accountNumber);

      CustomAssert.Contains(expected, subscribers);

      };

      領域層

      CustomerService類以真實web服務的名稱命名。在需求文檔、日常對話、架構圖以及代碼中,都用這個名稱來指代此web服務。 使用統一的名稱,能除去二義,提高溝通效率。

      public class CustomerService

      {

      public Subscriber SearchWithTelephoneNumber(string telephoneNumber)

      {

      string url =

      string.Format(

      "{0}/subscribers?telephoneNumber={1}",

      endpoint, telephoneNumber);

      //Send http request to web service, parse the xml returned,

      //populate the subscriber object and etc.

      return GetResponse(url);

      }

      ...

      }

      Subscriber類建模了用戶。比起用豎線分割的字符串,增加一層數據抽象,用對象表示返回的數據,能使 測試更容易理解(你應該不會偏好用pipedData[101]表示電話號碼吧?)。

      public class Subscriber

      {

      public string AccountNumber { get; set; }

      public string FirstName { get; set; }

      public string Surname { get; set; }

      public string TelephoneNumber { get; set; }

      ...

      }

      有了這些領域模型,測試就能直接構建在這些對象上了。例如,可以如此驗證所返回的用戶名為'Bei':

      Assert.AreEqual("Bei", subscriber.FirstName);

      或者電話號碼以'010'開始:

      Assert.IsTrue(subscriber.TelephoneNumber.StartsWith("010"));

      點擊這里可以下載到樣例代碼。代碼中演示了如何用分層架構組織測試自動化代碼。 你可以在Visual Studio 2008中打開項目,也可以在命令行運行執行'go.bat’來運行所有測試。 'go.bat’運行完后會將測試結果保存在'artifacts’文件夾。源代碼中包含三個項目。 名稱以with ‘Client’的項目包含領域層。以'Client.Spec’結尾的項目為領域層對應的單元測試(TDD)。'Stories’項目包含測試用例層。這份源代碼由真實項目中來,并作了相應修改。某些類返回了硬編碼的值,是為了不訪問真實的web服務。

    原文轉自:http://www.uml.org.cn/Test/200911196.asp

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