1

私のシナリオでは、オブジェクト パラメーターを受け取り、強く型付けされたクラス オブジェクトでリセットするサービス フレームワーク メソッドの 1 つをモックしたいと考えています。

 public void Updatedata(object pvm)
    {
        var vm = new datamodel()
            {
                name = "test",
                age = 100
            };
        pvm = vm;
    }

コンパイルエラー「無効なコールバック。パラメーター(オブジェクト)を使用したメソッドのセットアップは、パラメーター(データモデル)を使用してコールバックを呼び出すことはできません。」以下のコードでモックを作成します。

 mockderived.Setup(p => p.Updatedata(It.IsAny<datamodel>()))
             .Callback<datamodel>(p =>
                 {
                     p.name ="My name is test";
              });

オブジェクト型ではなくデータモデルをパラメーターとして受け入れるように updatedata メソッドを変更すると、モックは正常に機能します。コンパイル エラーを回避するために、オブジェクトをパラメーターとして渡すことでコードを変更しました。

  mockderived.Setup(p => p.Updatedata(It.IsAny<object>()))
             .Callback<object>(p =>
                 {
                     p = new datamodel() {name = "My name is test"};
              });

それによって実行されるコードは、期待どおりにデータモデルの値を変更しませんでした。

4

1 に答える 1

3

リフレクションを使用してコールバック メソッドのオブジェクト パラメーターのプロパティを設定した後、メソッドを適切にモックできます。

   mockderived.Setup(p => p.Updatedata(It.IsAny<object>()))
             .Callback<object>(p =>
                 {
                     var temp = new datamodel();
                     var t = temp.GetType();
                     var nameprop = "no name";
                     var prop = t.GetProperties();
                     prop[0].SetValue(p, nameprop, null);
              });
于 2013-06-12T11:00:28.940 に答える