2009-01-30 77 views
14

我知道Visual Studio提供了一些單元測試的好處。我如何使用它們,你如何使用它們?我應該對單元測試瞭解多少(假設我什麼都不知道)。C#開始使用Visual Studio進行單元測試

This question是類似的,但它沒有解決Visual Studio能做什麼,請不要將其標記爲重複的,因爲這樣做。作爲社區維基發佈,因爲我不想成爲代表妓女。

回答

2

VS中的單元測試結構與NUnit的使用類似。它的一個有趣的(和有用的)功能與NUnit顯着不同。 VS單元測試可以用於未考慮單元測試的代碼。

您可以在編寫應用程序之後構建單元測試框架,因爲測試結構允許您從外部引用方法調用並使用加速和拆除代碼準備測試環境。例如:如果在一個使用方法外部資源的類中有一個方法,您可以在加速類(VS爲您創建)中創建它們,然後在單元測試類中進行測試(也創建爲你由VS)。當測試結束時,拆除類(再次...由VS提供給你)將釋放資源並清理。整個過程存在於您的應用程序之外,因此不會影響代碼庫。

VS單元測試框架實際上是一個很好的實現和易於使用。最重要的是,您可以將它與未設計單元測試的應用程序結合使用(NUnit並非易事)。

+0

關心鏈接/說明NUnit? – Malfist 2009-01-30 20:50:02

+0

爲什麼在NUnit中不容易? NUnit提供與測試設置/拆卸相同的功能。您也可以使用NUnit來單元測試未用單元測試編寫的代碼。 – 2009-01-30 20:53:02

+0

也許我誤解了NUnit的工作原理,但我認爲你必須在你正在測試的代碼中放置陳述性語句,以便NUnit知道在哪裏找到測試主題。使用VS內置的測試框架,這不是必需的。雖然我可能對NUnit錯誤。 :) – Eric 2009-02-03 16:47:27

2

我會做的第一件事就是下載一份TestDriven.Net作爲測試跑步者使用。這將添加一個右鍵單擊菜單,通過右鍵單擊測試方法並選擇運行測試,可以運行單個測試。這也適用於類中的所有測試(在類中右鍵單擊,但在方法外),命名空間(右鍵單擊項目或類中的命名空間)或整個解決方案(右鍵單擊解決方案)。它還增加了使用覆蓋範圍(內置或nCover)或調試器從同一個右鍵單擊菜單運行測試的功能。

就設置測試而言,通常我會堅持每個項目一個測試項目和每個測試類別一個測試類別。有時我會爲許多類的方面創建測試類,但通常不會。我創建它們的典型方法是首先創建類的骨架 - 沒有屬性,沒有構造函數,但是使用我想要測試的第一種方法。這個方法只是拋出一個NotImplementedException異常。

一旦創建了類框架,我就在被測試的方法中使用右鍵單擊Create Unit Tests。這增加了一個對話框,讓您創建一個新的測試項目或選擇一個現有的項目。我創建並命名了一個新的測試項目,並讓該向導創建這些類。一旦完成,您可能還需要爲測試項目中的類創建私有訪問器函數。有時候,如果你的班級發生了很大的變化,這些需要更新(重新創建)。

現在你有一個測試項目和你的第一個測試。首先修改測試以定義方法的期望行爲。寫足夠的代碼(僅僅是)通過測試。繼續編寫測試/編寫代碼,爲該方法指定更多行爲,直到定義該方法的所有行爲。然後根據需要轉到下一個方法或類,直到您有足夠的代碼來完成您正在處理的功能。

您可以根據需要添加更多不同類型的測試。您也可以設置您的源代碼控制以要求在簽入之前通過部分或全部測試。

5

很容易,最顯着的區別是MSTest支持內置於Visual Studio中,並直接提供單元測試,代碼覆蓋率和模擬支持。爲了在外部(第三方)單元測試框架中執行相同類型的事情,通常需要多個框架(單元測試框架和模擬框架)以及其他工具來執行代碼覆蓋率分析。

使用MSTest單元測試工具的簡單方法是打開要爲其創建單元測試的文件,右鍵單擊編輯器窗口,然後從上下文菜單中選擇「創建單元測試...」菜單。我更喜歡把我的單元測試放在一個單獨的項目中,但這只是個人偏好。這樣做會創建一種「模板」測試類,它將包含測試方法,以允許您測試類的每個功能和屬性。此時,您需要確定測試通過或失敗的意義(換句話說,確定在給定一組輸入的情況下會發生什麼)。

一般情況下,你最終看上去類似這樣編寫測試:

string stringVal = "This"; 
Assert.IsTrue(stringVal.Length == 4); 

這就是說名爲stringVal的varaible,長度屬性應該是在轉讓之後等於4。

其他線程中列出的資源應該提供一個很好的起點來理解一般的單元測試。

相關問題