Обычно вам не нужно тестировать каждый метод по отдельности - вы можете просто проверить, что метод верхнего уровня делает правильные вещи.
Однако если по какой-то причине вы хотите протестировать каждый метод отдельно, вы можете использовать внедрение зависимостей так же, как вы тестировали бы любой метод, имеющий зависимости. Единственная разница здесь заключается в том, что зависимость - это сам объект. Вот пример кода для демонстрации идеи:
class NodeGetter : INodeGetter
{
public Node GetNode(Node parentNode)
{
return GetNode(parentNode, this);
}
public Node GetNode(Node parentNode, INodeGetter nodeGetter)
{
switch (parentNode.NodeType)
{
case NodeType.Multiple:
return nodeGetter.GetMultipleNode(parentNode, nodeGetter);
case NodeType.Repeating:
return nodeGetter.GetRepeatingNode(parentNode, nodeGetter);
default:
throw new NotSupportedException(
"Node type not supported: " + parentNode.NodeType);
}
}
public Node GetMultipleNode(Node parentNode, INodeGetter nodeGetter)
{
foreach (Node child in parentNode.Children)
{
return nodeGetter.GetNode(child);
}
}
public Node GetRepeatingNode(Node parentNode, INodeGetter nodeGetter)
{
for (int i = 0; i < parentNode.Count; i++)
{
// Assume meaningful constructor for Node
return nodeGetter.GetNode(new Node(i));
}
}
}
При проверке аргумента nodegetter передайте макет.
Я также изменил ваши методы с приватного на общедоступный, потому что лучше тестировать только публичный интерфейс вашего класса.