1

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 プロパティを正しく定義しましたか? モックを正しく作成していますか? 誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

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);
}
于 2013-10-18T16:55:41.023 に答える