Прежде всего, я знаю, что есть много вопросов по этой теме. Я прочитал большинство из них, но я действительно не знаю, является ли это отсутствием надлежащего ОО-программирования, или я что-то упускаю.
Итак, у меня есть класс 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-документа (который я могу заглушить позже, чтобы сломать зависимости). Основное внимание здесь уделяется приватным методам.