Unit testing 如何在VBA Excel宏中设置单元测试?

Unit testing 如何在VBA Excel宏中设置单元测试?,unit-testing,vba,excel,Unit Testing,Vba,Excel,我正在处理一个Excel VBA宏,该宏将获取一些Excel文件,对其进行清理/清理,并生成一个包含两张工作表的工作簿-工作表1是原始的“脏”文件,工作表2是清理干净的文件 因为我们现在有10种不同的格式,接下来是40+。。我想为一组给定的文件保存这个输出,然后编写一个单元测试,它接受原始输入,运行我们的宏,然后将宏的输出与保存的预期输出进行比较 然后,在以后的任何时候,当我们进行维护时,我们都可以快速轻松地运行单元测试,以确保我们没有破坏任何已经工作的东西 这是我第一次使用VBA。我在谷歌上搜

我正在处理一个Excel VBA宏,该宏将获取一些Excel文件,对其进行清理/清理,并生成一个包含两张工作表的工作簿-工作表1是原始的“脏”文件,工作表2是清理干净的文件

因为我们现在有10种不同的格式,接下来是40+。。我想为一组给定的文件保存这个输出,然后编写一个单元测试,它接受原始输入,运行我们的宏,然后将宏的输出与保存的预期输出进行比较

然后,在以后的任何时候,当我们进行维护时,我们都可以快速轻松地运行单元测试,以确保我们没有破坏任何已经工作的东西

这是我第一次使用VBA。我在谷歌上搜索框架或插件,找不到太多帮助。我确实找到了一个函数,可以比较2个完整的excel电子表格,所以我把这部分记下来了。但现在我需要弄清楚如何实际编写和执行这个单元测试。编写单元测试应该非常简单,但是我如何执行它呢?我不想在电子表格上放一个按钮,上面写着“运行单元测试”。。。在VBA/Excel中是否有一种方法可以运行任意函数,这样我就可以说右键单击我的UnitTest函数并执行“运行”


如果您对我的单元测试计划有任何其他反馈,我们将不胜感激。再次感谢。

多年没有看过它了,但它过去工作得很好。

当然,在“开发人员”选项卡(Excel 2007)下有一个“宏”按钮,其中列出了您可以运行的所有可用宏。您可以从列表中选择,然后单击“运行”。旧版本也有同样的功能,但我记不起它们位于何处

这里是2003版的链接


如果是我,我会创建第二个电子表格来引用要测试的工作表。(转到工具>引用>浏览)此新工作簿可以包含您想要的所有测试,而无需弄脏主工作簿。这也使您可以自由地为自己构建一个接口(如果您需要的话)

另请注意,如果要从Excel宏菜单中隐藏过程,但仍有权访问它们,请在模块顶部放置:

Option Private Module
然后将所有您希望能够使用的过程设置为“公共”。然后可以从即时窗口(VBE中的ctrl-g)调用它们,但它们不会列在宏列表中

但是,如果您将单元测试分开(您可能应该这样做),那么您就不必真正担心公共/私有模块。

是一个免费的开源VBE附加模块,它包括一个集成了IDE的单元测试框架,可用于大多数主要办公产品

  • 下载并安装
  • 打开VBA项目所在的Excel工作簿
  • 转到工具>>参考资料并添加对Rubberduck的引用
  • 添加一个新的标准模块
  • 添加
    @TestModule
    属性并创建
    ruberduck.AssertClass的实例

    `@TestModule
    
    Private Assert As Rubberduck.Assert
    
  • 开始编写测试。测试资源管理器将发现并运行标有
    '@TestMethod
    属性的任何公共子项

    '@TestMethod
    Public Sub OnePlusOneIsTwo()
        Assert.AreEqual 2, Add(1,1)
    End Sub
    
  • 有关更多信息,请参阅


    免责声明:我是该项目的开发人员之一。

    谢谢,我已经意识到了这一点,但不确定如何比较这些表。谢谢大家的留言。值得一提的是,链接wiki上的说明比此处给出的说明更为及时。