InternalsVisibleTo 属性の設定
更新 : 2007 年 11 月
コードには、internal アクセス修飾子 (Visual C# の場合) または Friend アクセス修飾子 (Visual Basic の場合) が設定されたクラス、インターフェイス、または構造体が含まれていることがあります。型には、次のいずれかの理由でこの修飾子が追加されます。
ユーザーが型を明示的に internal とマークしました。
アクセス修飾子が明示的に追加されていないトップレベルのクラス、インターフェイス、または構造体は、既定で internal と見なされます。
テスト対象のコード内のプライベート要素、内部要素、およびフレンド要素は、テスト コードには現れませんが、テストの対象とすることは可能です。プライベート メソッドのテスト方法の詳細については、「方法 : プライベート メソッドをテストする」を参照してください。
内部アクセス修飾子を持つ要素のテスト
内部型が含まれるコードの単体テストを生成するときに、[InternalsVisibleTo 属性を追加する] ダイアログ ボックスが表示されることがあります。ここには、次のような Yes/No 型質問が表示されます。
Friend または Internal と指定されたテストを生成することにしました。プロジェクト <プロジェクト名> に InternalsVisibleTo 属性を追加しますか?
ソース プロジェクトで厳密な名前の署名が有効な場合は、テスト プロジェクトの署名も有効にしてください。有効にしないと、コンパイル エラーが発生します。
このメッセージでは、<プロジェクト名> はテスト対象コードを含むプロジェクトを意味します。[はい] を選択すると、テスト対象のコードのアセンブリに InternalsVisibleTo 属性が設定され、そのアセンブリ内の内部型がテスト プロジェクトに表示されます。これにより、それらの内部型に対して単体テストを実行できます。
メモ : |
---|
InternalsVisibleTo 属性には 2 つの形式があります。単純な形式では、アクセスを許可するアセンブリを指定します。より複雑な形式には、厳密な名前の署名に使用される公開キーも含まれます。詳細については、以下のセクションを参照してください。 |
[いいえ] を選択すると、テスト対象コード アセンブリ内の内部型は private アクセス修飾子が追加されているものとして扱われます。この場合、テストを生成すると、プライベート アクセサが作成され、テスト アセンブリで内部型およびプライベート型へのアクセスが可能になります。プライベート アクセサ アセンブリはテスト プロジェクトの [テストの参照] フォルダにあります。
InternalsVisibleTo とプライベート アクセサのどちらを使用するか
プライベート アクセサ アセンブリを使用して、プライベート メンバと内部メンバの両方にアクセスできます。テスト対象コードに内部メンバがあり、プライベート メンバがない場合は、テスト対象コードで InternalsVisibleTo 属性を使用し、プライベート アクセサ アセンブリを作成しないことをお勧めします。ただし、コードにテスト対象のプライベート メンバと内部メンバの両方が含まれている場合は、プライベート アクセサを使用します。これにより、プライベート メンバと内部メンバの両方にアクセスできるからです。詳細については、「プライベート アクセサの使用」を参照してください。
厳密な名前の署名の必要性
[InternalsVisibleTo 属性を追加する] ダイアログ ボックスの 2 つ目のパラグラフには、厳密な名前の署名に関する情報があります。これは、厳密な名前の署名を有効にしなければ、ソリューションを構築するときにコンパイル エラーが発生することを意味します。
厳密な名前の署名をテスト対象コード アセンブリに対して有効にした場合は、テスト アセンブリに対しても有効にしてください。この場合は、署名付きの InternalsVisibleTo 属性を使用する必要があります。次に例を示します。
[InternalsVisibleTo(“OtherAssembly, PublicKey=12435234fsdaf;l457fwi248ew843872r892r”)]
厳密な名前の署名がテスト対象コード アセンブリに対して有効でない場合は、テスト アセンブリに対しても有効にする必要はありません。この場合は、署名なしの InternalsVisibleTo 属性を使用できます。
[InternalsVisibleTo(“OtherAssembly”)]
メモ : [InternalsVisibleTo 属性を追加する] ダイアログ ボックスで [はい] をクリックすると、Visual Studio は公開キーを含まない単純形式の InternalsVisibleTo 属性を追加します。
テスト対象コード アセンブリをインストルメント化してコード カバレッジ データの収集を有効にすると、厳密な名前の署名にも影響します。詳細については、「アセンブリのインストルメント化と再署名」を参照してください。