InternalsVisibleToを使用して、別の Test アセンブリからユーティリティ/ヘルパー メソッドをテストできるようにしようとしています。動的パラメーターを使用して内部メソッドを呼び出そうとすると、 「 RuntimeBinderException was unhandled ... is inaccessible due to its protection level.」というエラーが表示されます。
動的パラメーターを使用しない他の内部メソッドをテストできるので、InternalsVisibleTo属性を正しく使用していると思います。次のコードは、以下に示すようにTestInternalMethodWithDynamicテストのみが失敗するシナリオを示しています。静的メソッドの代わりにインスタンス メソッドを使用してテストを繰り返しましたが、違いはありませんでした。
.NET テクノロジは Silverlight 5 であり、Silverlight 単体テスト フレームワークを使用してテストを実行しています。プロジェクトの Excel 自動化要件により、動的パラメーターを使用する必要があります。
編集: .NET 4 クラス ライブラリ アセンブリを使用して同じ呼び出しをテストしましたが、成功したため、問題はSilverlightに固有のようです。
ユーティリティ クラスの例...
public class Utility
{
internal static int InternalMethodWithDynamic(dynamic parameter) {
return (int)parameter;
}
internal static int InternalMethodWithInteger(int parameter) {
return parameter;
}
public static int PublicMethodWithDynamic(dynamic parmater) {
return (int)parmater;
}
public static int PublicMethodWithInteger(int parmater) {
return parmater;
}
}
そしてテストクラス...
[TestClass]
public class UtilityTest
{
[TestMethod]
public void TestInternalMethodWithDynamic() {
dynamic parameter = 10;
Assert.AreEqual(10, Utility.InternalMethodWithDynamic(parameter));
}
[TestMethod]
public void TestPublicMethodWithInteger() {
int parameter = 10;
Assert.AreEqual(10, Utility.PublicMethodWithInteger(parameter));
}
[TestMethod]
public void TestPublicMethodWithDynamic() {
dynamic parameter = 10;
Assert.AreEqual(10, Utility.PublicMethodWithDynamic(parameter));
}
[TestMethod]
public void TestInternalMethodWithInteger() {
int parameter = 10;
Assert.AreEqual(10, Utility.InternalMethodWithInteger(parameter));
}
}