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 が表示されることです。Locals ウィンドウを見ると、Currency と BillValue の両方が表示されます
-ValueItem { Currency = USD, BillValue = 100 } dynamic{<>f__AnonymousType1}
-BillValue 0x00000064 int
-Currency "USD" 文字列
メソッドを通常使用すると機能します。唯一の違いは、Currency と BillValue が Local ウィンドウの Dynamic View アイテムの下にあることです。
-ValueItem {} dynamic {MEIConfiguration.ConfigurationValueItem}
-Dynamic View Dynamic View を展開すると、オブジェクトの動的メンバーが取得されます
-BillValue 0x000003e8 System.Int32
-Currency "GBP" System.String
C++/CLI プロパティを正しく定義しましたか? モックを正しく作成していますか? 誰が私が間違っているのか教えてもらえますか?