1

我有一个像这样ClassA的私有方法的类DoSomething

private bool DoSomething(string id, string name, string location
  , DataSet ds, int max, ref int counter)

参数类型不同,最后一个参数是 ref 参数。

我想对这个方法进行单元测试,我知道我可以使用 PrivateObject 这样做。但我不确定如何正确调用此方法。

我试过这个

DataSet ds = new DataSet("DummyTable");
PrivateObject po = new PrivateObject(typeof(ClassA));
string id = "abcd";
string name = "Fiat";
string location = "dealer";

bool sent = (bool) po.Invoke(
    "DoSomething"
    , new Type[] { typeof(string), typeof(string), typeof(string)
        , typeof(DataSet), typeof(int), typeof(int) }
    , new Object[] { id, name, location, ds, 500, 120 });

,但我得到这个错误

System.ArgumentException :找不到指定的成员 (DoSomething)。您可能需要重新生成私有访问器,或者该成员可能是私有的并在基类上定义。如果后者为真,则需要将定义成员的类型传递给 PrivateObject 的构造函数。

我认为我做的一切都是正确的,但显然,我不是。

更新和解决方案

弄清楚了。从 Invoke 调用中删除 Type[] 可以修复它:

bool sent = (bool) po.Invoke(
    "DoSomething"
    //, new Type[] { typeof(string), typeof(string), typeof(string)
    //    , typeof(DataSet), typeof(int), typeof(int) } // comment this
    , new Object[] { id, name, location, ds, 500, 120 });
4

1 回答 1

2

删除像 belove 这样的类型并改用 Object 。另请参阅如何在上面的问题更新中使用它

bool sent = (bool) po.Invoke("DoSomething", 
                new Object[] { id, name, location, ds, 500, 120 });
于 2017-09-26T14:33:23.250 回答