首先,我知道有很多關於這個話題的問題。我讀過其中的大部分,但我真的不知道它是否缺乏適當的面向對象編程,或者我是否缺少一些東西。單元測試專用方法
所以我有一個類xmlRead
,它將XML文件讀入一些列表。我想單元測試這個類。我認爲最簡單的方法就是測試addDataToList()
。但這是一種私人方法。所以我想知道是否應該公開它,或者測試公共方法ReadTheXmlFile()。
public class xmlRead
{
List<string> ... // A couple of lists that need to filled with data from the XML document
xmlDocument xDoc = new xmlDocument
public void ReadTheXmlFile()
{
// Find default file, if it doesn't exist, ask user for file through Openfiledialog
// and open XMLDocument + error handling if XMLdocument is empty etc.
xDoc.load(filepath);
takeInXmlData();
}
private void takeInXmlData()
{
addDataToList(list<string> list1, xmlNode 1);
// More addDataToList for different lists
...
addDataToList(list<string> list2, xmlNode 2);
}
private void addDataToList(list<string> inputList, xmlNode)
{
foreach (XmlNode node in xmlDoc.SelectNodes(xmlNode))
{
inputList.Add(node.SelectSingleNode("Specific name of node").InnerText);
}
}
所以我儘量分開東西。但這也意味着我的方法addDataToList
非常小,但容易進行單元測試。但我也覺得它不應該是一種公開的方法。我當然可以測試公共方法ReadTheXmlFile()
,但是我必須爲每個錯誤檢測結果做出特定的測試用例,並且在我看來,我不會正確測試數據到列表中的實際攝入量。
我是否過於保護,是否應該讓addDateToList
(或takeInXmlData
)公開?或者我應該只是測試公共方法ReadTheXmlFile
,直到我考慮所有可能的方式?
它只是感覺像很多工作,這種做法違背了簡單單元測試的原則。 PS:不需要擔心我直接在這裏加載xDoc的事實,我有一個管理XML文檔加載的接口(我可以稍後存根來打破依賴關係)。重點是在這裏的私人方法。
你應該不需要測試私有方法,如果它們很複雜,那麼設計需要再次查看。 – luketorjussen 2012-02-07 10:58:00
就是這樣,他們不是。他們就像3-4行代碼。因此,我爲什麼要測試它們。他們被稱爲「很多」。因此,我打破了一些我會立即知道的單元測試。 – 2012-02-07 11:00:30