我正在尝试使用InternalsVisibleTo来允许我从单独的测试程序集中测试实用程序/辅助方法。当我尝试使用动态参数调用内部方法时,我收到错误“ RuntimeBinderException 未处理...由于其保护级别而无法访问。 ”
我相信我正确使用了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));
}
}