Подтвердить что ты не робот

Как настроить unit test в макросе VBA Excel?

Я работаю над макросом Excel VBA, который возьмет некоторый файл excel, вычистит/очистит его и создаст книгу с двумя листами 1, являющимися оригинальным "грязным" файлом, а лист 2 - чистым файлом. /p >

Так как у нас есть 10 разных форматов прямо сейчас и по дороге 40+.. Я хотел бы сохранить этот вывод для заданного набора файлов, а затем написать unit test, который берет исходный вход, запускает наш макрос, затем сравнивает вывод макроса с сохраненным ожидаемым выходом.

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

Это мой первый опыт работы с VBA. Я googled вокруг для фреймворков или плагинов и не могу найти много помощи. Я нашел функцию, которая будет сравнивать две целые таблицы Excel, поэтому у меня есть эта часть. Но теперь мне нужно выяснить, как на самом деле писать и выполнять этот unit test. Написание unit test должно быть довольно простым, но как его выполнить? Я не хочу нажимать кнопку на электронной таблице, которая гласит: "Выполнять модульные тесты"... Есть ли способ в VBA/Excel просто запустить произвольную функцию, поэтому я могу просто щелкнуть правой кнопкой мыши на моей функции UnitTest и сделать 'Выполнить'?

Любые дополнительные отзывы о том, что мои планы по модульному тестированию также будут оценены. Еще раз спасибо.

4b9b3361

Ответ 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