單元測試和集成測試業務應用程序

發表于:2016-06-01來源:不詳作者:Omar Al Zabir點擊數: 標簽:單元測試
本文主要通過小例子介紹下單元測試,集成測試,測試驅動開發等概念。

  本文主要通過小例子介紹下單元測試,集成測試,測試驅動開發等概念。

  切入正文:

  單元測試是通過寫代碼來測試代碼的一個小單位測試方式。在一個單元測試中,一次只能測試一個類。例如,如果你正在測試一個使用類File,而另一個測試類DummyFile是用來消除對物理文件系統的需要,單元測試的測試類邏輯應該被測試。為了使class實現從真實到虛/存根之間切換,接口代替真正的類使用。所以,你的類應使用IFile或IDatabase而不是直接使用File和Database。

  集成測試,也叫組裝測試或聯合測試。在單元測試的基礎上,將所有模塊按照設計要求(如根據結構圖)組裝成為子系統或系統,進行集成測試。例如:正在測試CunsomerData,它依賴于LINQ to SQL數據庫連接,在集成測試中,確保能正常調動所有相關類的方法。

  測試驅動開發(TDD)是單元測試的極端形式??偟脑瓌t是先寫單元測試,然后編寫實際的代碼。例如,先寫單元測試,測試CustomerData與在沒有真正的代碼類CustomerData。該CustomerData類可能包含類似功能InsertCustomer ,DeleteCustomer , GetCustomer等,它們做的不外乎返回一些虛擬Customer對象,以滿足單元測試。 一旦單元測試都與虛擬數據相連,然后你開始寫的CustomerData實際代碼,它就會訪問數據庫做真正的處理。編寫真正的代碼后,單元測試并沒有改變測試代碼。TDD要求類被設計在沒有直接依賴于其他類中。所有的依賴關系通過接口。例如,CustomerData不直接使用SqlConnection,而是使用ISqlConnection ,所有的依賴提供給CustomerData構造。

  使用行為驅動開發測試

  測試的單一方法用于單個期望是麻煩的。你必須寫更多的測試方法來測試每個方法的整體行為。此外,在每個測試方法中,你必須在適當環境下建立測試類,只是為了驗證一個特定的期望方式。

  例如:給定一個空Stack 當一個項目被壓入堆棧和Pop被稱為對象然后壓入堆棧中的最后一項被返回時,該項目從堆棧中移除,以及任何額外調用Pop都拋出異常。這里定義完整行為的Pop方法。測試這種行為方法的所有預期和相關行為Pop 。

  使用BDD單元測試

  在第一個例子中,我們將進行單元測試數據訪問層。使用LINQ到SQL對象持久化數據訪問層交易緩存在實體層面。例如,當你要加載一個用戶,它首先檢查高速緩存,看看用戶是否已經緩存,如果沒有,它從數據庫中加載用戶,然后緩存它。我們來看看PageRepository ,其中所涉及Page實體持久性。共同創建,讀取,更新和銷毀(CRUD)方法。舉一個例子方法GetPageById ,需要一個PageId并加載該Page從數據庫中。

  public class PageRepository : IPageRepository

  {

  #region Fields

  private readonly IDropthingsDataContext _database;

  private readonly ICache _cacheResolver;

  #endregion Fields

  #region Constructors

  public PageRepository(IDropthingsDataContext database, ICache cacheResolver)

  {

  this._database = database;

  this._cacheResolver = cacheResolver;

  }

  #endregion Constructors

  #region Methods

  public Page GetPageById(int pageId)

  {

  string cacheKey = CacheSetup.CacheKeys.PageId(pageId);

  object cachedPage = _cacheResolver.Get(cacheKey);

  if (null == cachedPage)

  {

  var page = _database.GetSingle(

  DropthingsDataContext.SubsystemEnum.Page,

  pageId,

  LinqQueries.CompiledQuery_GetPageById);

  page.Detach();

  _cacheResolver.Add(cacheKey, page);

  return page;

  }

  else

  {

  return cachedPage as Page;

  }

  }

  }

  PageRepository需要IDropthingsDataContext ,這是測試與LINQ to SQL的一個單位DataContext 。默認情況下,LINQ到SQL不會生成DataContext就是單元測試。你將不得不嘗試做一個DataContext單元測試。接著,它需要一個ICache其是與緩存涉及的接口。在這個例子中,假設有一個名為類EnterpriseLibraryCache它將實現ICache 。

  測試及預期結果確保:鑒于新PageRepository和一個空的緩存,當 GetPageById是帶一個PageId 。它首先檢查緩存,如果發現沒有,它從數據庫中的網頁中加載,并返回預期頁面。

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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97