Как можно проверить, правильно ли построена структура данных? Я реализую вид модифицированного радикального дерева, и мне было интересно, как проверить, правильно ли выстраивается ваша структура данных.
Рассмотрим дерево из TreeNode {String, Int}
узлов.
Вы всегда хотите добавить новый дочерний элемент в самый глубокий узел со значением, равным 0, как в следующем примере:
Root, 0
- Child_1, 5
- Child_2, 0
- Child_3, 1
Вопрос в том, как выполнить модульное тестирование, если древовидная структура строится так, как вы хотели? TreeNode имеет только один метод, который будет insert
.
Моя идея до сих пор заключалась в том, чтобы написать TreeVisitor
, который будет проходить по дереву и преобразовывать каждый узел в строку.
Дерево из примера выше, может выглядеть так:
[Root, 0 [Child_1, 5][Child_2, 0 [Child_3, 1]]]
Зная алгоритм построения дерева, я могу создать такую строку вручную, если у меня есть представление о том, какие элементы я вставляю. Мой модульный тест будет выглядеть так (на том же примере).
TreeNode root = new TreeNode("Root", 0);
root.insert(new TreeNode("Child_1", 5));
root.insert(new TreeNode("Child_2", 0));
root.insert(new TreeNode("Child_3", 1));
TreeVisitor visitor = new TreeVisitor();
String expected = "[Root, 0 [Child_1, 5][Child_2, 0 [Child_3, 1]]]";
asssertEquals(expected, visitor.visit(root));
У меня ощущение, что это не лучший подход. Для начала, как только посетитель изменится, все тесты не пройдут (просто введите изменение [ ]
в ( )
). Кроме того, этот подход позволяет мне тестировать довольно маленькие деревья (настолько большие, насколько я могу вычислить вручную). Как бы вы протестировали большие?
Общий вопрос, как писать тесты, проверяющие, правильно ли создается структура данных ?
Полагаю, я неправильно понял всю идею тестирования, так как я только что ознакомился с дюжиной руководств, в которых люди проверяют, работает ли .Sum (a, b), как ожидалось :-)