チュートリアル: 単体テストを使用して 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. [テンプレート] ペインの [リスト定義] を選択し、[OK] をクリックします。

    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 テスト プロジェクトの作成] をクリックし、[OK] をクリックします。 この例では、既定のテスト プロジェクト名である TestProject1 を使用します。

  4. 次のウィンドウに、リスト定義プロジェクトのツリー ビューが表示されます。 ItemAdding メソッドが表示されるまで、ツリー ビューのノードを展開します。

  5. ItemAdding メソッドの横のチェック ボックスをオンにし、[OK] をクリックします。

    これで、EventReceiver1Test という名前のコード モジュールがある TestProject1 という名前の新しいプロジェクトが作成されます。 このコード モジュールには、対応する ItemAdding メソッドをテストするために使用される ItemAddingTest メソッドが含まれています。

  6. ソリューション エクスプローラーで、テスト プロジェクトを強調表示し、[表示] メニューの [プロパティ ページ] をクリックします。

  7. テスト プロジェクト用の [プロパティ ページ] で、[アプリケーション] タブをクリックし、[ターゲット フレームワーク] ボックスの一覧の [.NET Framework 3.5] をクリックします。

    [ターゲット フレームワークの変更] ダイアログ ボックスが表示され、ターゲット フレームワークの変更を確認するメッセージが表示されます。 [はい] をクリックします。 これにより、テスト プロジェクトで使用される .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 ビット プロセスでテストを実行] をクリックします。 [適用] をクリックし、[閉じる] をクリックします。

    この設定は、64 ビットの SharePoint アプリケーションをテストするために必要です。

ソリューションの配置

SharePoint ソリューションと単体テストを作成した後、SharePoint ソリューションを配置し、スタートアップ プロジェクトを変更します。 単体テストでは、テスト前に SharePoint プロジェクトが SharePoint サーバー上の所定の場所に配置されている必要があるので、SharePoint プロジェクトの配置を実行する必要があります。 プロジェクトを配置した後、スタートアップ プロジェクトを単体テストに変更して、F5 キーでデバッグできるようにします。

ソリューションを配置するには

  1. [ビルド] メニューの [ソリューションの配置] をクリックして、SharePoint ソリューションを配置します。

  2. [TestProject] を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。

単体テストの実行

SharePoint ソリューションと単体テストが準備されたので、単体テストを実行して、イベント レシーバーが正常に動作するかどうかを確認します。

単体テストを実行するには

  1. F5 キーを押して、テスト プロジェクトを実行します。

    テスト コードによって SharePoint サイトに関する新しいお知らせが作成され、イベント レシーバーがトリガーされます。

  2. ブレークポイントに達したら、F5 キーを押してテストを続行します。

    イベント レシーバー内のこの行により、新しいお知らせにコメントが追加されます。 次に、テスト コードは、お知らせの中にコメントが含まれているかどうかをチェックします。

  3. [テスト結果] ウィンドウが表示され、ItemAddingTest が成功したことが示されます。 テストの詳細を表示するには、リスト内の ItemAddingTest をダブルクリックします。

    テスト結果の詳細には、テスト名、開始時刻と終了時刻、テスト継続時間などの情報が含まれます。

参照

概念

単体テストの構造

既存コードに対する単体テストの作成と実行

IntelliTrace を使用したデバッグ

その他の技術情報

ALM 機能を使用した SharePoint コードの検証およびデバッグ

チュートリアル: IntelliTrace を使用して SharePoint アプリケーションをデバッグする