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