我正在尝试测试一个使用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,指出该对象不包含Currency的定义。如果我查看Locals窗口,它会显示Currency和BillValue
-ValueItem {Currency = USD,BillValue = 100}
动态{&LT;&GT; f__AnonymousType1}
-BillValue 0x00000064 int
- 货币“美元”字符串
正常使用该方法时,它可以正常工作。我看到的唯一区别是Currency和BillValue位于Local窗口的Dynamic View项目下
-ValueItem {} dynamic {MEIConfiguration.ConfigurationValueItem}
- 动态视图扩展动态视图将获得对象的动态成员
-BillValue 0x000003e8 System.Int32
-Currency“GBP”System.String
我是否正确定义了C ++ / CLI属性? 我正确地创建了模拟吗? 谁能告诉我我做错了什么?
答案 0 :(得分:1)
对于任何感兴趣的人都是同事提供的解决方案。
[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);
}