プライベート メソッド、内部メソッド、およびフレンド メソッドの単体テスト

通常、プライベート メソッド、内部メソッド、またはフレンド メソッドとしてマークされたメソッドは、それらのメソッドを含むクラスの外部からは参照できません。 しかし、Visual Studio ツールの単体テストを使用すると、単体テスト ファイルが異なるクラスにある場合でも、それらのメソッドにアクセスできます。

これらのメソッドを許可するために単体テスト ファイルを編集する必要はありませんが、内部メソッドおよびフレンド メソッドを扱う方法に関して、いくつかの選択肢があります。 ここでは、これらの選択肢について紹介し、プライベート メソッド、内部メソッド、およびフレンド メソッドでテストを実施した場合にプロジェクトで起こることについて説明します。

注意

単体テストを作成する方法については、「既存コードに対する単体テストの作成と実行」を参照してください。

注意

Visual Studio 2010 ではアクセサーが使用されていないため、Visual Studio の今後のバージョンには含められない可能性があります。

プライベート メソッド

プライベート メソッドの単体テストを生成すると、[テストの参照] フォルダーがテスト プロジェクトに追加され、アクセサーがそのフォルダーに追加されます。 アクセサーは、単体テスト メソッドのロジックでも参照されます。

Form1_Accessor target = new Form1_Accessor(); // TODO: Initialize to an appropriate value
Dim target As Form1_Accessor = New Form1_Accessor() ' TODO: Initialize to an appropriate value

このアクセサーによって、単体テストがテスト対象のコードでプライベート メソッドを呼び出すことができます。

アクセサーは、手動で作成したり、削除後に再作成したりできます。 これを行うには、テスト対象のコードを右クリックし、[プライベート アクセサーの作成] をポイントし、アクセサーが必要なテスト プロジェクトを選択します。

内部メソッドまたはフレンド メソッド

単体テストの作成を、C# で内部メソッド用に行う場合や Microsoft Visual Basic でフレンド メソッド用に行う場合、ダイアログ ボックスが表示され、内部メソッドがプライベート アクセサーでアクセスされるようにするか、InternalsVisibleToAttribute でアクセスされるようにするかを選択できます。

注意

属性が既にプロジェクトに追加されている場合は、このダイアログ ボックスが表示されないことがあります。

内部メソッドが InternalsVisibleToAttribute でアクセスされるように選択した場合は、この属性が AssemblyInfo.cs ファイルに追加されます。 この属性によって、テスト対象のコードの内部メソッドをテスト プロジェクトで利用できるようになります。 新しい属性は、このオプションを選択した各テスト プロジェクト用に追加されます。

内部メソッドがプライベート アクセサーでアクセスされるように選択した場合は、プライベート メソッドについてこの記事で前述したのと同じ動作が行われます。つまり、テスト プロジェクトに [テストの参照] フォルダーが追加され、追加されたフォルダーにアクセサーが追加され、追加されたアクセサーは単体テスト メソッドのロジックで参照されます。 この場合は、プライベート アクセサーによって、テスト対象の内部メソッドおよびプライベート メソッドの両方にアクセスできるようになります。

プロジェクトに InternalsVisibleToAttribute を追加することを選択した場合でも、内部メソッド用の単体テストを作成し、プライベート アクセサーでアクセスされるように設定できます。 ただし、これは単体テストを作成するときに行う必要があります。 [単体テストの作成] ダイアログ ボックスで、[設定] をクリックします。 [テスト生成の設定] ダイアログ ボックスで、[InternalsVisibleTo 属性を有効にする] チェック ボックスをオフにします。

参照

概念

単体テストの構造

ユニット テストと C++

ジェネリック メソッドの単体テスト