Идея о том, как проверить рендеринг, довольно проста: для проверки функции используйте обратную функцию и проверьте, совпадают ли вход и выход (в вашем случае совпадение не равно):
f(f^-1(x)) = x
Чтобы проверить алгоритм рендеринга, вы должны кодировать необработанный ввод, отображать закодированные значения и анализировать разницу между обработанным выводом и необработанным вводом. Одна проблема заключается в получении необработанного ввода, когда кодирование / декодирование случайного ввода не подходит. Другая проблема заключается в оценке различий между необработанным вводом и выводом рендеринга. Я полагаю, что если вы пишете какое-то программное обеспечение для рендеринга, вы сможете анализировать данные по частоте. (Некоторая трансформация должна появиться в вашей голове.)
Если возможно, сгенерируйте ваши тестовые данные. Приспособления для текста - это реальная проблема обслуживания. Они только сияют в начале. Если они меняются, то все рушится. Основная проблема заключается в том, что если вы используете прибор, ваши тесты будут повторять его содержимое. Это усложняет интерпретацию ваших тестов. Если в вашем тесте есть какое-то магическое значение, какова значимая часть этого значения?
Крепеж:
actual = parse("file.xml")
expected = "magic value"
assert(actual == expected)
Генерируемые значения:
expected = generate()
input = render(expected)
actual = parse()
assert(actual == expected)
Хорошая особенность генераторов в том, что вы можете строить из них довольно сложные графы объектов, начиная с примитивных типов и полей ( python Quickcheck версия ).
Генераторные тесты не являются детерминированными по своей природе. Но при достаточном количестве испытаний они следуют Закону больших чисел .
Их дополнительная ценность в том, что они дадут хороший тестовый диапазон значений охват. (Этого сложно добиться с помощью тестовых приспособлений.) Они найдут непредвиденные ошибки в вашем коде.
Альтернативный подход к тестированию заключается в тестировании с эквивалентной функцией:
f(x) = f'(x)
Например, если у вас есть функция рендеринга для сравнения. Такой подход к тестированию полезен, если у вас есть рабочая функция. Эта функция является вашим эталоном. Его нельзя использовать в производстве, потому что он медленен или использует много памяти, но его легко отладить или доказать, что он правильный.