为什么我的动态模拟不起作用
本文关键字:不起作用 模拟 动态 我的 为什么 | 更新日期: 2023-09-27 18:31:58
我正在尝试测试一个使用 C++/CLI 包装器中的动态属性的 C# 方法。我试图模拟的界面是
property Object^ DynamicValueItem
{
[returnvalue: System::Runtime::CompilerServices::DynamicAttribute]
Object^ get () ;
}
我尝试测试的方法是
public void GetBillInfo (IConfigurationItem item)
{
dynamic ValueItem = item.DynamicValueItem;
string Curr = ValueItem.Currency;
string Ser = ValueItem.BillSeries;
}
我的测试方法是
[TestMethod()]
public void GetBillInfoTest()
{
BnrHelperMethods target = new BnrHelperMethods();
var ValueItem = new
{
Currency = "USD",
BillValue = 100,
};
var mockItem = new Mock<IConfigurationItem>();
mockItem.Setup(i => i.DynamicValueItem).Returns(ValueItem);
target.GetBillInfo(mockItem.Object);
}
我从 http://blogs.clariusconsulting.net/kzu/how-to-mock-a-dynamic-object/那里得到了模拟动态属性的方法
该示例适用于标准 C# 动态属性,因此我必须调整我的 C++/CLI 属性以尝试获得相同的效果。我的问题是,当我执行测试时,我得到一个 RuntimeBinderException,指出该对象不包含货币的定义。如果我查看"局部变量"窗口,它同时显示"货币"和"账单价值
"-价值项目 { 货币 = 美元,账单价值 = 100 } 动态{<>f__AnonymousType1}
-账单价值 0x00000064 int
-货币"美元"字符串
当正常使用该方法时,它可以工作。我看到的唯一区别是货币和账单价值位于"本地"窗口中的动态视图项下
-ValueItem {} dynamic {MEIConfiguration.ConfigurationValueItem}
-动态视图 展开动态视图将获得对象的
动态成员-BillValue 0x000003e8 System.Int32
-货币"英镑"系统.字符串
我是否正确定义了 C++/CLI 属性?我是否正确创建了模拟?谁能告诉我我做错了什么?
对于任何对此感兴趣的人,都可以使用同事提供的解决方案。
[TestMethod()]
public void GetBillInfoTest()
{
BnrHelperMethods target = new BnrHelperMethods();
dynamic valueItem = new ExpandoObject();
valueItem.Currency = "USD" ;
valueItem.BillValue = 100;
var mockItem = new Mock<IConfigurationItem>();
mockItem.Setup(i => i.DynamicValueItem).Returns ((object)valueItem);
target.GetBillInfo(mockItem.Object);
}