互联网充斥着页面,说我们不应该为私有方法编写单元测试用例。但我不确定说我们应该完全忽略单元测试用例的私有方法是否正确?我知道如果我们测试主要的公共方法,他们最终会被测试。但想象一下,我的方法是通过私有方法访问数据库并从数据集中填充对象。如果我想为我的数据库使用模拟,我将不得不为这种方法编写一个单元测试用例,这会迫使我公开它。我如何克服这种情况?单元测试私有方法和使用模拟对象
由于下面是我的公开方法,如果我写一个单元测试用例,它会每次都碰到数据库。我想避免这种情况,因为数据库是我一直想要模拟的外部依赖项。使用数据库的另一个问题是假设我正在对单元测试用例中的sysid进行硬编码,直到系统数据库存在于db中时才起作用。从db中删除该记录时,测试用例变得毫无用处。
public Order RetrieveOrderAndOrderItem()
{
DataSet ordersDS = new DataSet();
Order obj = new Order();
OrdersDb.RetrieveOrders(conKey,companySysId,userSysId,orderId,ordersDS);
obj = populateObjFromDb(ordersDS,orderItemId, orderItemSubType);
return obj;
}
private Order populateObjFromDb(DataSet orders,int orderItemId, int orderItemSubType)
{
Order orderObj = new Order();
orderObj.OrderId = Converters.DBInt(orders.Tables[0].Rows[0]["OrderId"]);
return orderObj;
}
嗯,首先要注意的是,不测试私有方法是好的,礼貌地说,hooey。你测试你需要测试的东西。我的一般方法是将需要测试的方法公开为'protected',然后创建一个子类来访问这些方法。 –