逐步解說:使用單元測試驗證 SharePoint 程式碼
使用測試可讓您更精確地偵錯及檢查程式碼的作業。 本逐步解說將示範如何將單元測試合併到 SharePoint 應用程式。 雖然這個逐步解說會使用特定的 SharePoint 專案類型,但是任何類型的 SharePoint 程式碼專案都可以使用單元測試加以測試。
從包含清單執行個體和事件接收器的標準清單定義專案開始,然後在事件接收器程式碼中加入單元測試,該程式碼會在 SharePoint 中加入公告清單。 公告的建立會使事件接收器修改公告。 單元測試會檢查公告是否依照預期的方式修改,並回報結果。
這個逐步解說將說明下列工作:
使用清單定義專案範本建立包含清單執行個體的清單定義。
使用事件接收器專案範本建立事件接收器。
使用程式碼加入和修改清單項目。
在 SharePoint 專案中加入單元測試。
在 SharePoint 專案上執行單元測試。
檢視及解譯單元測試結果。
注意事項 在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本和使用的設定決定了這些項目。 如需詳細資訊,請參閱 使用設定。
必要條件
您需要下列元件才能完成此逐步解說:
支援的 Microsoft Windows 和 SharePoint 版本。 如需詳細資訊,請參閱開發 SharePoint 方案的要求。
Visual Studio 2010 Professional、Visual Studio 2010 Premium 或 Visual Studio 2010 Ultimate。
建立清單定義專案
首先,建立包含清單執行個體的清單定義專案。
若要建立清單定義專案
使用 [以系統管理員身分執行] 選項來啟動 Visual Studio 2010。
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。 [新增專案] 對話方塊隨即出現。
在 [新增專案] 對話方塊頂端,選取下拉式清單中的 [.NET Framework 3.5]。
在 [新增專案] 對話方塊中,展開您要使用之語言下的 [SharePoint] 節點,然後選取 [2010] 節點。
在 [範本] 窗格中,選取 [清單定義],然後按一下 [確定]。
[SharePoint 自訂精靈] 隨即出現。 使用預設專案名稱 ListDefinitionProject1。 這個精靈可讓您選取用來偵錯專案的網站以及方案的信任層級。
選取 [部署為陣列方案],然後按 [下一步]。 ALM 功能只適用於陣列方案。
在 [選擇清單定義設定] 視窗中,按一下 [完成] 接受預設值。 這樣會建立公告清單定義,並將該清單的執行個體加入至 SharePoint。
將事件接收器加入至清單定義
將事件接收器加入至清單定義,好讓您回應對清單定義所做的變更。
若要將事件接收器加入至專案
按一下 [方案總管] 中的清單定義。
按一下 [專案] 功能表上的 [加入新項目]。
在 [加入新項目] 對話方塊中,在 [已安裝的範本] 窗格中展開 [SharePoint] 節點,然後按一下 [2010]。
在 SharePoint 範本清單中,選取 [事件接收器],然後按一下 [加入]。 使用預設專案項目名稱 EventReceiver1。
在 [選擇事件接收器設定] 視窗中,保留事件接收器類型為 [清單項目事件],並使用預設事件來源。
在 [處理下列事件] 清單中,核取 [正在加入項目],然後按一下 [完成]。 這樣會建立事件處理常式,當建立公告時即引發此處理常式。
以下列程式碼取代 EventReceiver1 類別的 ItemAdding 方法。
Public Overrides Sub ItemAdding(properties As SPItemEventProperties) properties.AfterProperties("Body") = "Note added by event receiver" MyBase.ItemAdding(properties) End Sub
public override void ItemAdding(SPItemEventProperties properties) { properties.AfterProperties["Body"] = "Note added by event receiver"; base.ItemAdding(properties); }
在 properties.AfterProperties 行加入中斷點。 之後測試事件接收器時就會使用它。
建置專案。
將單元測試加入至事件接收器
若要測試事件接收器是否正常運作,請將單元測試加入其中。
若要將單元測試加入事件接收器
在 [測試] 功能表上按一下 [新增測試]。 [加入新測試] 對話方塊隨即出現。
在 [範本] 中按一下 [單元測試精靈]。
在 [加入至測試專案] 下拉式清單中,選取 [建立新的 Visual C# 測試專案] 或 [建立新的 Visual Basic 測試專案],然後按一下 [確定]。 在這個範例中,請使用預設測試專案名稱 TestProject1。
下一個視窗會顯示清單定義專案的樹狀檢視。 展開樹狀檢視中的節點,直到看到 ItemAdding 方法為止。
選取 ItemAdding 方法旁邊的核取方塊,然後按一下 [確定]。
如此就會建立名為 [TestProject1] 的新專案,其中包含名為 EventReceiver1Test 的程式碼模組。 此程式碼模組包含 ItemAddingTest 方法,此方法是用來測試對應的 ItemAdding 方法。
反白顯示 [方案總管] 中的測試專案,然後按一下 [檢視] 功能表上的 [屬性頁]。
在測試專案的 [屬性頁] 中,按一下 [應用程式] 索引標籤,然後選取 [目標 Framework] 下拉式清單中的 [.NET Framework 3.5]。
隨即出現 [目標 Framework 變更] 對話方塊,詢問您是否要變更目標 Framework。 按一下 [是]。 如此可確保測試專案使用的 .NET Framework 版本符合 SharePoint 專案使用的版本。
將下列程式碼加入至 EventReceiver1Test 類別的頂端。
' SharePoint site/subsite. Private siteUrl As String = "https://localhost" Private webUrl As String = "/"
// SharePoint site/subsite. private string siteUrl = "https://localhost"; private string webUrl = "/";
以下列程式碼取代 ItemAddingTest 方法。
<TestMethod()> _ Public Sub ItemAddingTest() Try Using site As New SPSite(siteUrl) Using web As SPWeb = site.OpenWeb(webUrl) ' Reference the list instance. Dim mySite As SPList = web.Lists("ListDefinitionProject1 - ListInstance1") ' Add a new announcement to the Announcements list. Dim listItems As SPListItemCollection = mySite.Items Dim item As SPListItem = listItems.Add() item("Title") = "A Unit Test Announcement" item("Expires") = "1/1/2099" item.Update() ' Test whether the event receiver added the text to the announcement. Dim existingItem As SPListItem = listItems(0) Assert.AreEqual(existingItem("Body").ToString().Contains("Note added by event receiver"), True, "Body passed!") End Using End Using Catch e As Exception Console.WriteLine("Error: " & e.ToString()) End Try End Sub
public void ItemAddingTest() { try { using (SPSite site = new SPSite(siteUrl)) { using (SPWeb web = site.OpenWeb(webUrl)) { // Reference the list instance. SPList mySite = web.Lists["ListDefinitionProject1 - ListInstance1"]; // Add a new announcement to the Announcements list. SPListItemCollection listItems = mySite.Items; SPListItem item = listItems.Add(); item["Title"] = "A Unit Test Announcement"; item["Expires"] = "1/1/2099"; item.Update(); // Test whether the event receiver added the text to the announcement. SPListItem existingItem = listItems[0]; Assert.AreEqual(existingItem["Body"].ToString().Contains("Note added by event receiver"), true, "Test succeeded!"); } } } catch (Exception e) { Console.WriteLine("Error: " + e.ToString()); } }
此程式碼會開啟 SharePoint 網站,並加入新的公告。 當新的公告加入至 SharePoint 時,事件接收器中的程式碼便會觸發,在公告中加入註解。 單元測試中的程式碼會藉由呼叫 Assert.AreEqual 來檢查事件接收器是否已在公告中加入註解。
在 [方案總管] 中選取 TestProject1,並指向 [測試] 功能表上的 [編輯測試設定],然後按一下 [本機 (local.testsettings)]。 [測試設定] 視窗隨即出現。
在 [測試設定] 視窗的左窗格,按一下 [主機],然後在 [在 32 位元或 64 位元處理序中執行測試] 下拉式清單中,選取 [在 64 位元電腦上的 64 位元處理序中執行測試]。 按一下 [套用],然後按一下 [關閉]。
這是測試 SharePoint 應用程式 (64 位元) 所需的設定。
部署方案
在建立 SharePoint 方案和單元測試之後,請部署 SharePoint 方案,然後變更啟始專案。 單元測試在測試之前會要求 SharePoint 專案必須位於 SharePoint 伺服器上,所以您必須部署 SharePoint 專案。 在部署專案之後,請將啟始專案變更為單元測試,以啟用 F5 偵錯。
若要部署方案
按一下 [建置] 功能表上的 [部署方案],部署 SharePoint 方案。
以滑鼠右鍵按一下 TestProject1,並選取 [設定為啟始專案]。
執行單元測試
現在 SharePoint 方案已就緒且單元測試已備妥,請執行單元測試來檢查事件接收器是否正常運作。
若要執行單元測試
按 F5 執行測試專案。
測試程式碼會在 SharePoint 網站上建立新的公告,觸發事件接收器。
當遇到中斷點時,請按 F5 繼續執行。
事件接收器中的這一行會在新的公告中加入註解。 然後測試程式碼會檢查公告中是否有註解存在。
隨即出現 [測試結果] 視窗,並指定已通過 ItemAddingTest。 按兩下清單中的 ItemAddingTest,檢視測試詳細資料。
測試結果詳細資料包含類似測試的名稱、開始和結束時間及測試期間等資訊。