0

使用PrivateObject多參量我有一個類ClassA私人方法DoSomething這樣單元測試私有方法的C#

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的構造函數。

我想我做的都是正確的,但很明顯,我不是。

更新和解決方案

想通了。從調用呼叫中刪除類型[]可修復它:

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 }); 
+0

想象出來,請參閱原始帖子中的更新和解決方案 – pixel

+1

如果您有解決方案,最好發佈一個答案並將其作爲正確答案進行檢查,而不是在您的問題中嵌入答案。 –

回答

0

刪除類型喜歡的並使用Object來代替。 bool sent =(bool)po.Invoke(「DoSomething」//,new Type [] {typeof(string),typeof(string),typeof(string)//,typeof (DataSet),typeof(int),typeof(int)} //註釋this,new Object [] {id,name,location,ds,500,120});