2013-08-02 160 views
0

我有一個4層應用程序我應該在n層應用程序

1)表示(MVC)
2)服務(WCF)
3)商業
4)數據

測試哪些層

在我的服務層的一些方法進行了大量的如其他子進程,

public OrderResponse PlaceOrder(OrderRequest request) 
{ 
    if (CheckForSufficientStock(request.ItemId)) { 
      ReserveStock(request.ItemId); 
      ProcessPayment(request.CustomerPaymentDetails); 
      RemoveStockFromInventory(request.ItemId); 
      ArrangeForShipping(request.CustomerDetails); 
      AddToOrderHistory(request);   
    } 
} 

我開始學習如何編寫單元測試,並且我有幾個問題

1)我應該爲單元測試編寫哪一層?我是否在MVC項目中爲我的控制器編寫單元測試?還是必須爲我的服務層中的每個方法編寫單元測試?或兩者? 2)如果我必須爲MVC &服務層編寫單元測試,我是否可以說,我的MVC項目中的單元測試將測試PlaceOrder,並且單元測試測試我的服務層將測試所有的子功能,例如ReserveStock,ProcessPayment等?

回答

2

通常您需要端到端測試以及單元測試。我不想解釋這個基本概念,但我只想從我自己的經驗中列出一些最佳實踐。

爲了進行單元測試,一次只能測試一層嘲諷它基於的圖層。例如,當您測試業務層時,您應該模擬數據訪問層。通過嘲笑下面的圖層,您可以在邏輯上隔離要測試的代碼存根,而無需觸及其他圖層。這種方法不僅容易處理,還可以防止測試太多東西並獲得虛假警報。您也可以準備測試夾具以確保您每次運行測試時,都會執行dry run

下面是一些流行的技術,你可以用做單元測試:

  • 在視圖層測試javascipt的,你可以使用茉莉花
  • 要測試的C#代碼,你可以使用MSTest的NUnit的的xUnit
  • 嘲笑C#層,可以使用起訂量
  • 要做到端到端的測試,你可以使用
+1

另外考慮看看[NFluent](https://github.com/tpierrain/NFluent)一個非常強大的符合人體工程學的斷言庫[AutoFixture](https://github.com/AutoFixture),它可以幫助你如果你想要進行自動化測試,你可以儘量減少單元測試的'安排'階段和[SpecFlow](http://www.specflow.org/)! – MaxSC

0

我們都知道,單元測試是指在同一時間測試單個方案。 你將不得不爲所有圖層編寫單元測試。 例如,在你的情況下,在MVC PlaceOrder方法中,你的測試用例可以是:是否CheckForSufficientStock輸入參數不爲空,或者Verify,每個函數的調用方式爲TimesOnce。 同樣,在其他層,說

CheckForSufficientStock(int something) 
{ 
... 
} 

同樣的事情也會接踵而至,如果任何函數被再次調用,然後驗證時間,返回值。 Mocking需要跳到其它的層或功能實際呼叫,通過與返回的值,這是進行到下一行代碼所需的東西作假。我發現Moq最適合初學者使用。

相關問題