我一直在使用Rubberduck VBA加载项。
我想在没有参考文献中的Rubberduck加载项的情况下“交付”我的Excel应用程序。您如何处理?例如,可以“隐藏” TestModules而不编译它们吗?
如果您的测试模块是早期绑定的(开发时是个好主意!),那么在交付之前应删除对Rubberduck类型库的引用。
当然,您可以简单地删除测试模块,但这会成为重新导入和导出的烦恼……而您不想这样做。
您可以照原样发送项目(with测试模块,但without对Rubberduck的引用),因为测试模块不会位于该模块的任何执行路径中实际的实时代码:该项目不会compile,但仍可以正常运行](除非有人尝试调用测试方法。然后将加载测试模块,并且缺少库将被编译器注意)。
但是我的建议是更进一步,后期绑定AssertClass
实例(如果使用的是API,则绑定FakesProvider
:]
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
像这样配置,您可以轻松地在后期和早期装订模式之间切换:
中执行此操作(从“工具”菜单中,或者在Code Explorer中右键单击您的项目,然后选择Project Properties):#Const LateBind = True '/False
如果有多个测试模块,则可以定义一个名为
LateBindTests
的项目级预编译器常量,并一次切换所有Rubberduck测试模块的后期/早期绑定。您可以在Project Properties
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9XYkxSNC5wbmcifQ==” alt =“项目属性VBIDE对话框”>
((旁注:帮助文件
)项目属性(没人使用它,对吗?)正在被Rubberduck劫持,以为该项目分配并保留唯一的ID-更改该值而无需立即保存并关闭will破坏东西)