我一直在使用Rubberduck VBA加载项。
我想在没有引用文献中的Rubberduck加载项的情况下“交付”我的Excel应用程序。您如何处理?例如,是否可以“隐藏” TestModules而不编译它们?
最佳答案
如果您的测试模块是早期绑定(bind)的(这在开发时是个好主意!),那么在交付之前,应删除对Rubberduck类型库的引用。
当然,您可以简单地删除测试模块,但这会成为重新导入和导出的麻烦……而您不想这样做。
您可以按原样发送项目(带有测试模块,但无需引用Rubberduck),因为测试模块不会在实际实时代码的任何执行路径中:项目不会编译,但可以编译仍然可以正常运行(除非有人尝试调用测试方法。否则将加载测试模块,并且编译器会注意到缺少的库)。
但是我的建议是更进一步,后期绑定(bind)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配置为默认情况下后期绑定(bind)新测试模块:
如果您使用“Permissive assert”(它以类似于VBA的许可方式实现类型相等),则要用于后期绑定(bind)的ProgID是
Rubberduck.PermissiveAssertClass
。相对较新的配置是“双重绑定(bind)”,它可以按如下方式设置新的测试模块:
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
像这样配置,您可以轻松地在后期绑定(bind)模式和早期绑定(bind)模式之间切换:
#Const LateBind = True '/False
如果您有多个测试模块,则可以定义一个项目级别的预编译器常量
LateBindTests
,并一次切换所有Rubberduck测试模块的晚期/早期绑定(bind)。您可以在“项目属性”中执行此操作(从“工具”菜单中,或在“代码资源管理器”中右键单击您的项目,然后选择“项目属性”):(旁注:“帮助文件”项目属性(没有人使用它,对吗?)正在被Rubberduck劫持,以为其分配并保留唯一的ID给该项目-更改此值而不立即保存并关闭将破坏内容)
关于excel - 如何在没有Rubberduck TestModules的情况下交付Excel VBA应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58770133/