Когда у вас есть простой метод, такой как, например, sum (int x, int y), легко написать модульные тесты. Вы можете проверить, что метод будет правильно суммировать два примера целых чисел, например, 2 + 3 должен вернуть 5, затем вы проверите то же самое для некоторых «необычных» чисел, например, отрицательных значений и нуля. Каждый из них должен быть отдельным модульным тестом, так как отдельный модульный тест должен содержать одно утверждение.
Что вы делаете, когда у вас сложный ввод-вывод? Взять, к примеру, XML-парсер. Вы можете иметь один метод parse (String xml), который получает String и возвращает объект Dom. Вы можете написать отдельные тесты, которые будут проверять, что определенный текстовый узел анализируется правильно, что атрибуты анализируются нормально, что дочерний узел принадлежит родительскому и т. Д. Для всех этих случаев я могу написать простой ввод, например
<root><child/></root>
, который будет использоваться для проверки родительско-дочерних отношений между узлами и т. Д. Для остальных ожиданий.
Теперь взгляните на следующий XML:
<root>
<child1 attribute11="attribute 11 value" attribute12="attribute 12 value">Text 1</child1>
<child2 attribute21="attribute 21 value" attribute22="attribute 22 value">Text 2</child2>
</root>
Чтобы проверить, что метод работает правильно, мне нужно проверить много сложных условий, например, что attribute11 и attribute12 принадлежат element1, что Text 1 принадлежит child1 и т. Д. Я не хочу ставить более одного утверждения в моем модульном тесте. Как мне это сделать?