如何在没有Rubberduck TestModules的情况下交付Excel VBA应用程序?

Ben

我一直在使用Rubberduck VBA加载项。

我想在没有参考文件中的Rubberduck加载项的情况下“交付”我的Excel应用程序。您如何处理?例如,是否可以“隐藏” TestModules而不编译它们?

马修·金登(Mathieu Guindon)

如果您的测试模块是早期绑定的(这在开发时是个好主意!),则在交付之前应删除对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测试模块的晚期/早期绑定。您可以在“项目属性”中执行此操作(从“工具”菜单中,或在“代码资源管理器”中右键单击您的项目,然后选择“项目属性”):

项目属性“ VBIDE”对话框

(旁注:“帮助文件”项目属性(没有人使用它,对吗?)正在被Rubberduck劫持,以为该项目分配并保留唯一的ID-在不立即保存和关闭的情况下更改此值破坏东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MEAN Stack:如何在不提供域名的情况下使用交付node.js应用程序?

来自分类Dev

XDK如何在没有MAC的情况下编译IOS应用程序?

来自分类Dev

如何在没有Visual Studio的情况下构建Windows Store 8.1应用程序?

来自分类Dev

如何在没有QQuickView的情况下拍摄QML应用程序的屏幕截图

来自分类Dev

如何在没有openshift的情况下托管Django localhost应用程序?

来自分类Dev

如何在没有对话框的情况下固定应用程序

来自分类Dev

如何在没有UI的情况下使用UWP创建后台应用程序?

来自分类Dev

如何在没有python控制台的情况下运行tkinter应用程序

来自分类Dev

如何在没有控制台的情况下创建gui应用程序?

来自分类Dev

如何在没有提示的情况下以管理员身份运行应用程序?

来自分类Dev

如何在没有屏幕记录的情况下运行cherrypy应用程序?

来自分类Dev

如何在没有sudo特权的情况下构建应用程序?

来自分类Dev

如何在没有qmlscene的情况下创建跨平台的Ubuntu Touch应用程序?

来自分类Dev

XDK如何在没有MAC的情况下编译IOS应用程序?

来自分类Dev

如何在eclipse中没有main方法的情况下运行JavaFX应用程序?

来自分类Dev

如何在没有 Eclipse 的情况下运行 Spring Boot 应用程序?

来自分类Dev

如何在没有额外应用程序的情况下安装 Cinnamon?

来自分类Dev

Pwinauto:如何在没有 GUI 错误的情况下启动应用程序

来自分类Dev

没有应用程序ID的情况下如何访问默认应用程序?

来自分类Dev

在没有相机应用程序的情况下拍照

来自分类Dev

如何在没有GUI的情况下运行GUI应用程序(GUI应用程序作为无头服务器上的守护程序)?

来自分类Dev

如何在没有命名冲突的情况下使用AngularJS构建MVC Web API应用程序

来自分类Dev

如何在Racket中没有框架的[x]按钮的情况下从GUI应用程序退出

来自分类Dev

如何在没有尝试捕获的情况下检查Metro应用程序中是否存在文件

来自分类Dev

在没有任何JavaScript知识的情况下,如何在PNaCl中编写C ++ HTML5应用程序?

来自分类Dev

如何在没有托管页面的情况下从node-webkit获取桌面应用程序的访问令牌?

来自分类Dev

我的Ruby on Rails应用程序如何在没有密码的情况下访问数据库?

来自分类Dev

如何在没有USB连接的情况下通过WiFi调试我的Android应用程序?

来自分类Dev

如何在没有SceneDelegate的情况下使用SwiftUI 2更新我的应用程序代码

Related 相关文章

  1. 1

    MEAN Stack:如何在不提供域名的情况下使用交付node.js应用程序?

  2. 2

    XDK如何在没有MAC的情况下编译IOS应用程序?

  3. 3

    如何在没有Visual Studio的情况下构建Windows Store 8.1应用程序?

  4. 4

    如何在没有QQuickView的情况下拍摄QML应用程序的屏幕截图

  5. 5

    如何在没有openshift的情况下托管Django localhost应用程序?

  6. 6

    如何在没有对话框的情况下固定应用程序

  7. 7

    如何在没有UI的情况下使用UWP创建后台应用程序?

  8. 8

    如何在没有python控制台的情况下运行tkinter应用程序

  9. 9

    如何在没有控制台的情况下创建gui应用程序?

  10. 10

    如何在没有提示的情况下以管理员身份运行应用程序?

  11. 11

    如何在没有屏幕记录的情况下运行cherrypy应用程序?

  12. 12

    如何在没有sudo特权的情况下构建应用程序?

  13. 13

    如何在没有qmlscene的情况下创建跨平台的Ubuntu Touch应用程序?

  14. 14

    XDK如何在没有MAC的情况下编译IOS应用程序?

  15. 15

    如何在eclipse中没有main方法的情况下运行JavaFX应用程序?

  16. 16

    如何在没有 Eclipse 的情况下运行 Spring Boot 应用程序?

  17. 17

    如何在没有额外应用程序的情况下安装 Cinnamon?

  18. 18

    Pwinauto:如何在没有 GUI 错误的情况下启动应用程序

  19. 19

    没有应用程序ID的情况下如何访问默认应用程序?

  20. 20

    在没有相机应用程序的情况下拍照

  21. 21

    如何在没有GUI的情况下运行GUI应用程序(GUI应用程序作为无头服务器上的守护程序)?

  22. 22

    如何在没有命名冲突的情况下使用AngularJS构建MVC Web API应用程序

  23. 23

    如何在Racket中没有框架的[x]按钮的情况下从GUI应用程序退出

  24. 24

    如何在没有尝试捕获的情况下检查Metro应用程序中是否存在文件

  25. 25

    在没有任何JavaScript知识的情况下,如何在PNaCl中编写C ++ HTML5应用程序?

  26. 26

    如何在没有托管页面的情况下从node-webkit获取桌面应用程序的访问令牌?

  27. 27

    我的Ruby on Rails应用程序如何在没有密码的情况下访问数据库?

  28. 28

    如何在没有USB连接的情况下通过WiFi调试我的Android应用程序?

  29. 29

    如何在没有SceneDelegate的情况下使用SwiftUI 2更新我的应用程序代码

热门标签

归档