2017-08-08 145 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);