共用方式為


逐步解說:使用單元測試驗證 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。

建立清單定義專案

首先,建立包含清單執行個體的清單定義專案。

若要建立清單定義專案

  1. 使用 [以系統管理員身分執行] 選項來啟動 Visual Studio 2010。

  2. 在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。 [新增專案] 對話方塊隨即出現。

  3. 在 [新增專案] 對話方塊頂端,選取下拉式清單中的 [.NET Framework 3.5]。

  4. 在 [新增專案] 對話方塊中,展開您要使用之語言下的 [SharePoint] 節點,然後選取 [2010] 節點。

  5. 在 [範本] 窗格中,選取 [清單定義],然後按一下 [確定]。

    [SharePoint 自訂精靈] 隨即出現。 使用預設專案名稱 ListDefinitionProject1。 這個精靈可讓您選取用來偵錯專案的網站以及方案的信任層級。

  6. 選取 [部署為陣列方案],然後按 [下一步]。 ALM 功能只適用於陣列方案。

  7. 在 [選擇清單定義設定] 視窗中,按一下 [完成] 接受預設值。 這樣會建立公告清單定義,並將該清單的執行個體加入至 SharePoint。

將事件接收器加入至清單定義

將事件接收器加入至清單定義,好讓您回應對清單定義所做的變更。

若要將事件接收器加入至專案

  1. 按一下 [方案總管] 中的清單定義。

  2. 按一下 [專案] 功能表上的 [加入新項目]。

  3. 在 [加入新項目] 對話方塊中,在 [已安裝的範本] 窗格中展開 [SharePoint] 節點,然後按一下 [2010]。

  4. 在 SharePoint 範本清單中,選取 [事件接收器],然後按一下 [加入]。 使用預設專案項目名稱 EventReceiver1。

  5. 在 [選擇事件接收器設定] 視窗中,保留事件接收器類型為 [清單項目事件],並使用預設事件來源。

  6. 在 [處理下列事件] 清單中,核取 [正在加入項目],然後按一下 [完成]。 這樣會建立事件處理常式,當建立公告時即引發此處理常式。

  7. 以下列程式碼取代 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);
    }
    
  8. 在 properties.AfterProperties 行加入中斷點。 之後測試事件接收器時就會使用它。

  9. 建置專案。

將單元測試加入至事件接收器

若要測試事件接收器是否正常運作,請將單元測試加入其中。

若要將單元測試加入事件接收器

  1. 在 [測試] 功能表上按一下 [新增測試]。 [加入新測試] 對話方塊隨即出現。

  2. 在 [範本] 中按一下 [單元測試精靈]。

  3. 在 [加入至測試專案] 下拉式清單中,選取 [建立新的 Visual C# 測試專案] 或 [建立新的 Visual Basic 測試專案],然後按一下 [確定]。 在這個範例中,請使用預設測試專案名稱 TestProject1。

  4. 下一個視窗會顯示清單定義專案的樹狀檢視。 展開樹狀檢視中的節點,直到看到 ItemAdding 方法為止。

  5. 選取 ItemAdding 方法旁邊的核取方塊,然後按一下 [確定]。

    如此就會建立名為 [TestProject1] 的新專案,其中包含名為 EventReceiver1Test 的程式碼模組。 此程式碼模組包含 ItemAddingTest 方法,此方法是用來測試對應的 ItemAdding 方法。

  6. 反白顯示 [方案總管] 中的測試專案,然後按一下 [檢視] 功能表上的 [屬性頁]。

  7. 在測試專案的 [屬性頁] 中,按一下 [應用程式] 索引標籤,然後選取 [目標 Framework] 下拉式清單中的 [.NET Framework 3.5]。

    隨即出現 [目標 Framework 變更] 對話方塊,詢問您是否要變更目標 Framework。 按一下 []。 如此可確保測試專案使用的 .NET Framework 版本符合 SharePoint 專案使用的版本。

  8. 將下列程式碼加入至 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 = "/";
    
  9. 以下列程式碼取代 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 來檢查事件接收器是否已在公告中加入註解。

  10. 在 [方案總管] 中選取 TestProject1,並指向 [測試] 功能表上的 [編輯測試設定],然後按一下 [本機 (local.testsettings)]。 [測試設定] 視窗隨即出現。

  11. 在 [測試設定] 視窗的左窗格,按一下 [主機],然後在 [在 32 位元或 64 位元處理序中執行測試] 下拉式清單中,選取 [在 64 位元電腦上的 64 位元處理序中執行測試]。 按一下 [套用],然後按一下 [關閉]。

    這是測試 SharePoint 應用程式 (64 位元) 所需的設定。

部署方案

在建立 SharePoint 方案和單元測試之後,請部署 SharePoint 方案,然後變更啟始專案。 單元測試在測試之前會要求 SharePoint 專案必須位於 SharePoint 伺服器上,所以您必須部署 SharePoint 專案。 在部署專案之後,請將啟始專案變更為單元測試,以啟用 F5 偵錯。

若要部署方案

  1. 按一下 [建置] 功能表上的 [部署方案],部署 SharePoint 方案。

  2. 以滑鼠右鍵按一下 TestProject1,並選取 [設定為啟始專案]。

執行單元測試

現在 SharePoint 方案已就緒且單元測試已備妥,請執行單元測試來檢查事件接收器是否正常運作。

若要執行單元測試

  1. F5 執行測試專案。

    測試程式碼會在 SharePoint 網站上建立新的公告,觸發事件接收器。

  2. 當遇到中斷點時,請按 F5 繼續執行。

    事件接收器中的這一行會在新的公告中加入註解。 然後測試程式碼會檢查公告中是否有註解存在。

  3. 隨即出現 [測試結果] 視窗,並指定已通過 ItemAddingTest。 按兩下清單中的 ItemAddingTest,檢視測試詳細資料。

    測試結果詳細資料包含類似測試的名稱、開始和結束時間及測試期間等資訊。

請參閱

概念

單元測試的結構

針對現有的程式碼建立和執行單元測試

使用 IntelliTrace 進行偵錯

其他資源

使用 ALM 功能驗證及偵錯 SharePoint 程式碼

逐步解說:使用 IntelliTrace 偵錯 SharePoint 應用程式