将参数传递给PrivateObject方法

时间:2014-03-18 19:26:49

标签: c# unit-testing private-methods

我正在尝试对私有方法进行单元测试。 我在下面的question

中看到了以下示例
Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(retVal);

我的私人方法有2个参考参数。 如何通过?

3 个答案:

答案 0 :(得分:22)

如果传递参数数组,则将填充任何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];

答案 1 :(得分:2)

首先创建参数的对象数组。然后数组应该包含新的引用:

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 :(得分:1)

试试这个:

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