Итак, я разрабатывал несколько программ для AutoCAD 2005 и постоянно сталкивался с проблемами, в частности, я работал над программой, которая должна рисовать линии на основе абсолютных углов (азимутов) и расстояний, преобразование из специального формата ввода в градусы в радианы и обратно, и, как и у многих других программистов, мой код стал особенно громоздким и глючным; Я застрял почти на полторы недели из-за программы/сценария, который должен был занять около трех или четырех дней.
Я думал о внедрении среды тестирования, чтобы сделать разработку более плавной, но, в отличие от других языков, я работаю с языком, для которого предположительно нет абсолютно никаких библиотек, и, что еще лучше, это среда для встраивания сценариев.
У меня есть несколько идей о том, как может работать дизайн, но мне нужно объяснить несколько вещей:
Выполнение команд/фон AutoLISP
Большинство программ, которые я пишу, представляют собой консольные команды, очень похожие на оболочку. Например, скажем, я пишу функцию x
. В AutoLISP это выражается как (косая черта здесь также присутствует буквально): (defun x (arguments / local variables) body of function)
. Чтобы сделать его доступным для консоли, мне нужно изменить имя с x
на C:x
.
Таким образом, большую часть тестирования я должен проводить прямо из консоли; Я стараюсь избегать встроенного редактора Visual Lisp в AutoCAD, потому что он кажется отделенным от фактической рабочей среды, в которой, скорее всего, будет использоваться программа, и, похоже, у него нет реального отладчика. Поэтому мне часто приходится использовать (print "string")
или другие методы для отладки кода.
Идеи/Мысли/Вопросы
<сильный>1. Какие типы функций я мог бы захотеть предоставить для среды тестирования? Я сам слышал о нескольких парадигмах, таких как тестирование во время компиляции, утверждения, тестовые классы в Java и т. д. Следует ли мне пытаться закодировать утверждение ? Возможно, мне следует создать тесты с использованием отражения?
<сильный>2. Как и где я могу внедрить тесты? Я думал написать другую функцию и преобразовать все локальные переменные в глобальные, чтобы открыть ее для возможного контекста тестирования, но я все еще не уверен, как я мог бы захотеть сделать это. Я полагаю, что в AutoLISP отсутствуют обычные макросы Lisp, но я думаю, что он по-прежнему имеет очень хорошие возможности отражения, поэтому я могу фактически вводить команды в консоль, чтобы что-то делать. Я чувствую, что внешняя, ненавязчивая структура будет иметь наибольший смысл, но я хотел бы получить более опытный ответ на этот вопрос.