2017-08-08 188 views
0

我需要在抽象類中測試CheckWarehouseAvailability私有方法。私有方法的單元測試c#

public abstract class BaseAPI 
{ 
    private void CheckWarehouseAvailability(Order order) 
    { 
     //codes here 
    } 
} 

public class Processor : BaseAPI 
{ 

} 

這裏是我的TestMethod的

Processor pro = new Processor(); 
PrivateObject privBase = new PrivateObject(pro, new PrivateType(typeof(BaseAPI))); 
var retVal = privBase.Invoke("CheckWarehouseAvailability(order)"); 
Assert.AreEqual(true, retVal); 

當我運行的測試方法,我得到這個錯誤:An exception of type 'System.MissingMethodException' occured in mscorlib.dll but was not handled in user code

+2

的參數('order')需要調用之前構造和傳遞「Invoke」的附加參數。就像它當前編寫的那樣,您試圖調用一個包含字符串「(order)」作爲其名稱一部分的方法。 – dlatikay

回答

3

您需要實例的CheckWarehouseAvailabilityOrder參數,並將它作爲參數傳遞到PrivateObject.Invoke()

var order = new Order(); 
var retVal = privBase.Invoke("CheckWarehouseAvailability", order); 
// ... Assert 

MSDN: PrivateObject.Invoke(String, Object[])

而且,我不知道你在這裏斷言什麼:

Assert.AreEqual(true, retVal); 

...因爲CheckWarehouseAvailability有它的返回類型設置爲void,不bool

1

首先,你需要通過反射得到方法

MethodInfo methodName = privBase.GetType().GetMethod("ShowGrid", 
      BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 

然後用PARAMS調用方法

var retVal=methodName .Invoke(privBase, order);