Какие функции являются стандартными для среды тестирования?

Итак, я разрабатывал несколько программ для 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, но я думаю, что он по-прежнему имеет очень хорошие возможности отражения, поэтому я могу фактически вводить команды в консоль, чтобы что-то делать. Я чувствую, что внешняя, ненавязчивая структура будет иметь наибольший смысл, но я хотел бы получить более опытный ответ на этот вопрос.


person CinchBlue    schedule 23.06.2015    source источник


Ответы (1)


Базовая функциональность: при одних и тех же входных данных система дает одинаковые выходные данные.

Полезная функциональность: утверждения. Получив некоторые настройки в тестовом коде, вы затем запускаете часть программы, которую нужно протестировать, и делаете утверждения о выводе. Если все утверждения соответствуют ожиданиям, выведите что-нибудь минимальное. Если утверждение не выполняется, напечатайте что-нибудь более подробное, чтобы помочь отследить, что пошло не так.

Дополнительная функциональность. Если что-то ускользает от ваших тестов, и вам нужно вручную найти ошибку, напишите тест, который покроет эту ошибку в следующий раз.

Непрерывная функциональность. Запускайте тесты хотя бы один раз при отправке в вашу систему управления версиями. Они могут выполняться как предварительная отправка, если сбои часты, но само тестирование проходит быстро, или могут выполняться как после отправки, если сбои случаются редко, но тестирование выполняется медленно.

person Dean J    schedule 26.06.2015