Интересная «точка отсечения» для вашего приложения - вы говорите: «Пользователь заполняет форму». Если вы хотите протестировать, вы должны реорганизовать свой код, чтобы создать явное представление этой формы в виде структуры данных. Затем вы можете приступить к сбору форм и проверке того, что система соответствующим образом реагирует на каждую форму.
Может случиться, что действия, предпринятые вашей системой, не будут наблюдаться, пока что-то не коснется файловой системы. Вот пара идей:
Установите что-то вроде репозитория git для начального состояния файловой системы, запустите форму и посмотрите на вывод git diff. Скорее всего, это будет скорее регрессионное тестирование, чем юнит-тестирование.
Создайте новый модуль, единственная цель которого - сделать действия вашей программы наблюдаемыми. Это может быть так же просто, как запись соответствующего текста в файл журнала или сложным, как вам нравится. При необходимости вы можете использовать условную компиляцию или компоновку, чтобы этот модуль что-то делал, только когда система тестируется. Это ближе к традиционному модульному тестированию, так как теперь вы можете написать тесты, которые говорят, что после получения формы A, система должна выполнить последовательность действий B . Очевидно, что вы должны решить, какие действия следует соблюдать, чтобы сформировать разумный тест.
Я подозреваю, что вы обнаружите, что переходите к чему-то, что больше похоже на регрессионное тестирование, чем на модульное тестирование per se . Это не обязательно плохо. Не пропустите покрытие кода!
(Последнее замечание в скобках: в старые добрые времена приложений с интерактивной консолью Дон Либес создал инструмент под названием Expect , который был чрезвычайно полезен для создания сценариев программы, взаимодействующей как пользователь. На мой взгляд, нам крайне необходимо что-то подобное для взаимодействия с веб-страницами. Думаю, я напишу об этом вопрос: -)