Как вы тестируете модуль .EXE с помощью сторонней библиотеки dll? - PullRequest
6 голосов
/ 03 февраля 2009

Я все еще изучаю темные искусства TDD, и недавно Я пытался научиться делать TDD в VB6 , и к чему я в основном сужаю список, так это к бесплатному просто vbunit и наиболее дорого вбунит3.

Мое приложение представляет собой редактор richtext с большим количеством сторонних dll, и я искал в Google все выше и ниже, чтобы найти, как выполнить модульное тестирование этого exe-файла.

Итак, мой вопрос: как вы тестируете exe-файл? Особенно в контексте VB6, и если у вас есть хороший пример с vbunit3 или просто vbunit, вы просто спасатель, так как я сейчас утопаю в материале и все еще не могу написать один модульный тест: (

Редактировать

На самом деле приложение состоит из множества форм, модулей и модулей классов, и когда я его компилирую, оно, конечно, становится красивым, аккуратно упакованным .EXE-файлом. И, чтобы усложнить ситуацию, существует множество глобальных переменных, летающих вокруг.

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

Есть ли лучший способ сделать это?

Ответы [ 6 ]

6 голосов
/ 03 февраля 2009

Существует разница между юнит-тестами и интеграционными тестами. Вы не проводите модульное тестирование исполняемого файла. Вы тестируете модульные небольшие автономные блоки вычислений, такие как метод или процедура, в зависимости от того, какой язык вы используете. Интеграционный тест будет тестировать более крупные компоненты, такие как API, сторонние компоненты или даже исполняемые файлы, чтобы убедиться, что они работают должным образом для данного набора входных данных (хороших или плохих). Хотя вы можете провести интеграционное тестирование API или подключаемых модулей с помощью инструментов модульного тестирования, я не думаю, что вы найдете много инструментов модульного тестирования, которые работают для тестирования исполняемых файлов. Существуют и другие типы инструментов тестирования, которые лучше справляются с этой задачей. Простое написание сценариев, которые предоставляют различные типы входных данных и проверяют их выходные данные, может быть достаточным для многих сценариев.

Если вы хотите узнать больше о TDD и модульном тестировании, вам следует применить его к функциям или процедурам в VB6 - хотя я бы рекомендовал VB.NET (или C #) и заниматься объектно-ориентированной разработкой. Обычно инструменты ориентированы на программирование в стиле ОО.

4 голосов
/ 03 февраля 2009

Элементы управления ActiveX в VB значительно экономят время, однако они являются основой эффективной разработки, управляемой тестами.

Для эффективного тестирования всего приложения VB6, в идеале, вам необходим проект, в котором EXE представляет собой тонкую оболочку над ActiveX DLL, которая выполняет всю работу. Формы реализуют интерфейс и регистрируются в DLL. Поэтому, если у вас есть Форма ввода заказа, он реализует этот интерфейс IOrderEntryForm, а его события будут вызывать методы класса OrderEntry, расположенного в диалоговом окне MyAppUI.

Чтобы подчеркнуть в Visual Basic 6, FORMS может ОСУЩЕСТВЛЯТЬ интерфейс. Затем форма регистрируется с помощью класса UI в событии LOAD. События формы (например, MyButton_Click) вызывают методы класса UI. Класс пользовательского интерфейса, использующий методы интерфейса формы, чтобы изменить отображаемое. Это дополнительная работа, но она экономит много времени на тестирование. Также обслуживание, поскольку вы можете изменить внешний вид формы, пока реализованный интерфейс остается прежним.

Это также означает, что перед тем, как что-то вроде MYEXE-> MyActiveXDLL превратится в MYEXE-> MyUIDLL-> MyActiveXDLL.

Для вашей тестовой среды вы создаете ActiveX DLL, которая макетирует пользовательский интерфейс, создавая классы, которые реализуют различные интерфейсы форм. UI DLL не знает разницы, и вы полностью контролируете, какие входные данные отправляются и что вы читаете.

Обратите внимание, что об этом типе шаблона проектирования говорится здесь . Я использовал его как основу для разработки и поддержки приложения CAD / CAM моей компании для металлорежущих станков.

Сторонние элементы управления ActiveX - это проклятие этой схемы. Это потому, что код, выполняющий тяжелую работу, находится внутри самого элемента управления. Чем сложнее элемент управления ActiveX, тем хуже проблема. Тенденция в моей компании состоит в том, чтобы уменьшить нашу зависимость от сторонних контролей в пользу внутренних приложений.

Однако, как и в случае с любым алгоритмом и схемой проектирования, это включает в себя оценочный вызов. Сколько проблем вы получаете в областях вашего программного обеспечения, связанных с управлением расширенным текстом. Если не так много, вы, вероятно, можете избежать использования сценария тестирования, как ручного, так и автоматического (т. Е. Отправка нажатий клавиш в приложение), и использовать остальную часть модульного теста.

Критическим элементом использования модульного тестирования вашего ВСЕГО приложения является наполнение его как можно большим количеством интерфейсов. Просто сделайте то, что вы можете сейчас, и запишите области, которые вы хотите изменить, когда будете заниматься дальнейшим развитием. Не отчаивайтесь, если у вас нет 100% покрытия сразу или даже на следующий год.

1 голос
/ 04 февраля 2009

Другой способ - сделать приложение ActiveX EXE-файлом. Ваше приложение модульного тестирования может затем ссылаться на ваше приложение, как если бы оно было ActiveX DLL. Вам понадобится немало исследований, чтобы заставить это работать должным образом, с тех пор как я в последний раз работал с VB6, и я уверен, что было несколько хитростей, чтобы заставить его работать.

0 голосов
/ 06 февраля 2009

И чтобы сделать вещи более сложный там довольно много глобальных переменных, летающих вокруг.

Первый рефакторинг - это передача глобальных переменных в класс в ActiveX DLL. Свойство instancing этого класса должно быть установлено в GLOBAL MULTIUSE. При установке EXE для ссылки на ActiveX переменные будут по-прежнему глобальными, однако вы, когда вы извлекаете свой EXE-файл, чтобы заменить его на тестовый, можно использовать глобальные переменные.

Когда вы начнете тестирование, вы можете выполнить дальнейший рефакторинг, чтобы уменьшить количество глобальных переменных.

0 голосов
/ 04 февраля 2009

Конечно, вы можете тестировать отдельные EXE-файлы. Посмотрите, сколько приложений состоит из нескольких EXE-файлов.

Что касается сторонних компонентов, как вы относитесь к тестированию со стандартными компонентами VB6? Другие компоненты MS? То же самое со сторонним компонентом.

0 голосов
/ 03 февраля 2009

О единственном полезном совете, который я мог бы дать, - это подобрать Майкла Перса Эффективная работа с устаревшим кодом . Я думаю, что вашей самой большой проблемой будет набор инструментов, поскольку я знаю, что инструменты для модульного тестирования VB6 просто не так сильны.

Вы также можете попробовать спросить на TDD Yahoo! Перечислите , поскольку я знаю, что по крайней мере несколько человек используют там vbunit3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...