web-dev-qa-db-ja.com

PrivateObjectメソッドにパラメーターを渡す

私はプライベートメソッドをユニットテストしようとしています。私はこれについて以下の例を見ました 質問

Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(retVal);

私のプライベートメソッドには2つのrefパラメータがあります。それらを渡す方法は?

15
eomeroff

引数配列を渡すと、refパラメータが所定の場所に入力されます。

bool p1 = true; // can be others values
bool p2 = false; // can be others values
object[] args = new object[2] { p1, p2 };
var retval = obj.Invoke("PrivateMethod", args);

p1 = (bool)args[0];
p2 = (bool)args[1];
22
Lee

まず、パラメータのオブジェクト配列を作成します。配列には新しい参照が含まれている必要があります。

Class target = new Class();
PrivateObject obj = new PrivateObject(target);
object[] args = new object[] {arg1, arg2};
var retVal = obj.Invoke("PrivateMethodWithArgs", args);
Assert.AreEqual(retVal);

Debug.WriteLine(args[0]);
Debug.WriteLine(args[1]);
2
D Stanley

これを試して:

object [] myarray=new object[]{param1,param2};
var retVal = obj.Invoke("PrivateMethod",ref myarray);
1