dfe*_*aro 13 excel vba unit-testing excel-vba
我正在开发一个Excel VBA宏,它将获取一些excel文件,擦除/清理它,并生成一个包含2张的工作簿 - 第1页是原始的"脏"文件,第2页是干净地擦除的文件.
由于我们现在有10种不同的格式,并且在路上40+ ..我想保存这个输出为给定的文件集,然后写一个单元测试,它采取原始输入,运行我们的宏,然后比较宏的输出到我们保存的预期输出.
然后,当我们进行维护时,我们可以快速轻松地运行我们的单元测试,以确保我们不会破坏已经工作的任何东西.
这是我第一次使用VBA.我搜索框架或插件,并找不到多少帮助.我确实找到了一个比较2个excel电子表格的函数 - 所以我把那部分放下了.但现在我需要弄清楚如何实际编写和执行这个单元测试.编写单元测试应该非常简单 - 但我该如何执行呢?我不想在电子表格上放一个按钮来说明"运行单元测试"...在VBA/Excel中是否有办法只运行一个任意函数,所以我只能说右键单击我的UnitTest函数并做'跑'?
关于我的单元测试计划的任何其他反馈也将受到重视.再次感谢.
Oor*_*ang 10
如果是我,我会创建第二个电子表格,引用要测试的表格.(转到工具>引用>浏览)这个新工作簿可以包含您想要的所有测试,而不必弄脏您的主工作簿.如果您需要,还可以让您自己为自己构建一个界面.
作为旁注,如果要从Excel宏菜单中隐藏程序但仍可以访问它们,则在模块顶部放置:
Option Private Module
Run Code Online (Sandbox Code Playgroud)
然后使您希望能够使用"公共"的所有程序.然后,您可以从即时窗口(VBE中的ctrl-g)调用它们,但它们不会列在宏列表中.
但是如果你将你的单元测试分开(你可能应该这样),那么你真的不必担心公共/私有模块.
Rubberduck是一个免费的开源VBE插件,包含一个IDE集成的单元测试框架,适用于大多数主要的Office产品.
添加'@TestModule属性并创建一个实例Rubberduck.AssertClass
`@TestModule
Private Assert As Rubberduck.Assert
Run Code Online (Sandbox Code Playgroud)开始编写测试.标记有该'@TestMethod属性的任何Public Sub 都将被Test Explorer发现并运行.
'@TestMethod
Public Sub OnePlusOneIsTwo()
Assert.AreEqual 2, Add(1,1)
End Sub
Run Code Online (Sandbox Code Playgroud)
免责声明: 我是该项目的开发人员之一.