Я использую надстройку VBA Rubberduck.
Я хочу «доставить» свое приложение Excel без надстройки Rubberduck в списке ссылок. Как вам это удается? Можно ли, например, «скрыть» TestModules и не компилировать их?
Я использую надстройку VBA Rubberduck.
Я хочу «доставить» свое приложение Excel без надстройки Rubberduck в списке ссылок. Как вам это удается? Можно ли, например, «скрыть» TestModules и не компилировать их?
Если ваши тестовые модули были привязаны на ранней стадии (что является отличной идеей при разработке!), вам следует удалить ссылку на библиотеку типов Rubberduck перед поставкой.
Конечно, вы можете просто удалить тестовые модули, но повторный импорт и экспорт вызывают раздражение... и вы не хотите этого делать.
Вы можете отправить проект как есть (с тестовыми модулями, но без ссылки на Rubberduck), потому что тестовые модули не быть в любом пути выполнения для фактического работающего кода: проект не будет компилироваться, но по-прежнему будет работать нормально (если только кто-то не попытается вызвать тестовый метод... тогда будут загружены тестовые модули, а отсутствующая библиотека будет обнаружена компилятором).
Но я бы рекомендовал сделать еще один шаг и выполнить позднюю привязку экземпляра AssertClass
(и FakesProvider
, если вы используете этот API):
Option Explicit
Option Private Module
'@TestModule
'@Folder("Tests")
Private Assert As Object
Private Fakes As Object
'@ModuleInitialize
Private Sub ModuleInitialize()
'this method runs once per module.
Set Assert = CreateObject("Rubberduck.AssertClass")
Set Fakes = CreateObject("Rubberduck.FakesProvider")
End Sub
'@ModuleCleanup
Private Sub ModuleCleanup()
'this method runs once per module.
Set Assert = Nothing
Set Fakes = Nothing
End Sub
С поздней привязкой тестов проект теперь будет компилироваться с включенными тестовыми модулями. Конечно, вызов тестового метода взорвется (если только на этой машине нет Rubberduck!), но опять же, тестовые модули не должны находиться ни на одном пути выполнения вашего проекта VBA.
Вы можете настроить Rubberduck на позднее связывание новых тестовых модулей по умолчанию:
Если вы используете «Permissive assert» (оно реализует равенство типов разрешающим способом, подобным VBA), ProgID, который вы хотите использовать для поздней привязки, — Rubberduck.PermissiveAssertClass
.
Относительно новая возможная конфигурация — «двойное связывание», в которой новые тестовые модули настраиваются следующим образом:
Option Explicit
Option Private Module
'@TestModule
'@Folder("Tests")
#Const LateBind = LateBindTests
#If LateBind Then
Private Assert As Object
Private Fakes As Object
#Else
Private Assert As Rubberduck.PermissiveAssertClass
Private Fakes As Rubberduck.FakesProvider
#End If
'@ModuleInitialize
Private Sub ModuleInitialize()
'this method runs once per module.
#If LateBind Then
Set Assert = CreateObject("Rubberduck.PermissiveAssertClass")
Set Fakes = CreateObject("Rubberduck.FakesProvider")
#Else
Set Assert = New Rubberduck.PermissiveAssertClass
Set Fakes = New Rubberduck.FakesProvider
#End If
End Sub
'@ModuleCleanup
Private Sub ModuleCleanup()
'this method runs once per module.
Set Assert = Nothing
Set Fakes = Nothing
End Sub
С такой настройкой вы можете легко переключаться между режимами поздней и ранней привязки:
#Const LateBind = True '/False
Если у вас есть несколько тестовых модулей, вы можете определить константу прекомпилятора на уровне проекта с именем LateBindTests
и переключать позднее/раннее связывание для всех тестовых модулей Rubberduck одновременно. Это можно сделать в Свойствах проекта (из меню "Инструменты" или щелкните проект правой кнопкой мыши в Проводнике кода и выберите Свойства проекта). :
(примечание: свойство проекта Файл справки (никто его не использует, верно?) перехватывается Rubberduck, чтобы присвоить и сохранить уникальный идентификатор проекта — изменение этого значения без немедленного сохранения & закрытие сломает материал)