互联网上充斥着说我们不应该为私有方法编写单元测试用例的页面。但是我不确定说我们应该完全忽略单元测试用例的私有方法是否正确?我知道如果我们测试主要的公共方法,它们最终会被测试。但是想象一下我的方法,它访问数据库并从数据集中填充对象包含在一个私有方法中。如果我想为我的数据库使用模拟,我将不得不为此方法编写一个单元测试用例,这将迫使我将其公开。我该如何克服这种情况?
因为下面是我的公共方法,如果我为此编写一个单元测试用例,它每次都会命中数据库。我想避免,因为数据库是我一直想模拟的外部依赖项。使用 DB 的另一个问题是假设我正在从我的单元测试用例硬编码一个 sysid,它会一直工作到 sysid 存在于 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;
}