Как настроить unit test в макросе VBA Excel?
Я работаю над макросом Excel VBA, который возьмет некоторый файл excel, вычистит/очистит его и создаст книгу с двумя листами 1, являющимися оригинальным "грязным" файлом, а лист 2 - чистым файлом. /p >
Так как у нас есть 10 разных форматов прямо сейчас и по дороге 40+.. Я хотел бы сохранить этот вывод для заданного набора файлов, а затем написать unit test, который берет исходный вход, запускает наш макрос, затем сравнивает вывод макроса с сохраненным ожидаемым выходом.
Затем в любое время по дороге, когда мы проводим техническое обслуживание, мы можем быстро и легко запустить наши модульные тесты, чтобы убедиться, что мы не сломали ничего, что уже работало.
Это мой первый опыт работы с VBA. Я googled вокруг для фреймворков или плагинов и не могу найти много помощи. Я нашел функцию, которая будет сравнивать две целые таблицы Excel, поэтому у меня есть эта часть. Но теперь мне нужно выяснить, как на самом деле писать и выполнять этот unit test. Написание unit test должно быть довольно простым, но как его выполнить? Я не хочу нажимать кнопку на электронной таблице, которая гласит: "Выполнять модульные тесты"... Есть ли способ в VBA/Excel просто запустить произвольную функцию, поэтому я могу просто щелкнуть правой кнопкой мыши на моей функции UnitTest и сделать 'Выполнить'?
Любые дополнительные отзывы о том, что мои планы по модульному тестированию также будут оценены. Еще раз спасибо.
Ответы
Ответ 1
Если бы это был я, я бы создал вторую таблицу, которая ссылается на проверяемый лист. (Перейдите в раздел "Инструменты" > "Ссылки" > "Обзор" ). Эта новая книга может содержать все те тесты, которые вы хотите, не загрязняя основную рабочую книгу. Это также освобождает вас от необходимости создавать интерфейс для вас, если вы этого хотите.
В качестве побочного примечания, если вы хотите скрыть процедуры из меню Excel Macro, но у вас есть доступ к ним, в верхней части вашего модуля поставьте:
Option Private Module
Затем сделайте все процедуры, которые вы хотите использовать "Public". Затем вы можете вызвать их из непосредственного окна (ctrl-g в VBE), но они не будут указаны в списке макросов.
Но если вы проводите отдельные тесты устройства отдельно (как вам, вероятно, и нужно), вам действительно не нужно беспокоиться о модулях Public/Private.
Ответ 2
Rubberduck - бесплатная надстройка VBE с открытым исходным кодом, которая включает интегрированную модульную систему тестирования IDE и работает с большинством основных продуктов Office.
- Загрузите и установите последнюю версию.
- Откройте книгу Excel, в которой находится ваш проект VBA.
- Перейдите в раздел "Инструменты" → "Подтверждения" и добавьте ссылку на Rubberduck.
- Добавить новый стандартный модуль.
-
Добавьте атрибут '@TestModule
и создайте экземпляр Rubberduck.AssertClass
`@TestModule
Private Assert As Rubberduck.Assert
-
Начните писать тесты. Любой общедоступный суб, помеченный атрибутом '@TestMethod
, будет обнаружен и запущен проводником тестеров.
'@TestMethod
Public Sub OnePlusOneIsTwo()
Assert.AreEqual 2, Add(1,1)
End Sub
![Unit Test Explorer]()
Для получения дополнительной информации см. страницу Unit Testing вики проекта.
Отказ от ответственности: Я один из разработчиков проекта.
Ответ 3
Не смотрел на это годами, но vbaUnit работал хорошо...
Ответ 4
Конечно, под вкладкой Developer (Excel 2007) есть кнопка Macros, в которой перечислены все доступные макросы, которые вы можете запустить. Вы должны выбрать из списка и нажать "Выполнить". Старые версии имеют такую же функциональность, но я не могу вспомнить, где они находятся.
Вот ссылка на версию 2003 года
http://spreadsheets.about.com/od/advancedexcel/ss/excel_macro_5.htm