2009-11-24 30 views
13

我正在处理一个Excel VBA宏,它将采用一些excel文件,擦洗/清理它,并生成一张工作簿和两张工作表 - 工作表1是原始的“脏”文件,工作表2是干净地清理过的文件。如何在VBA Excel宏中设置单元测试?

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

然后随时后来在路上,当我们做保养,我们可以快速,轻松地运行我们的单元测试,以确保我们没有破坏任何东西已经奏效。

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

有关我的单元测试计划的任何额外反馈也将不胜感激。再次感谢。

回答

9

如果是我,我会创建一个引用要测试的片第二电子表格的链接。 (转到工具>参考>浏览)这个新的工作簿可以包含所有您想要的测试,而不必弄脏主工作簿。如果你需要的话,这也可以让你为自己建立一个界面。

作为一个侧面说明,如果你想隐藏Excel宏菜单程序,但仍然可以访问他们,在你的模块放顶:

Option Private Module 

然后让所有你想要的程序能够使用“公共”。然后可以从即时窗口调用它们(VBE中的ctrl-g),但它们不会在宏列表中列出。

但是,如果你把你的单元测试分开(或许你应该),那么你真的不担心公共/私有模块。

+0

感谢您的选项私人模块提示.. – peege 2014-10-28 07:57:13

5

已经很多年没有看着它,但vbaUnit用来工作好...

+0

谢谢,已经知道它,但不能确定我应该如何比较床单。谢谢大家 – dferraro 2009-12-07 16:06:53

8

Rubberduck是一款免费的开源VBE插件,包含IDE集成的单元测试框架,可用于大多数主要Office产品。

  1. 下载并安装latest release
  2. 打开您的VBA项目所在的Excel工作簿。
  3. 转至工具>>参考并添加对Rubberduck的引用。
  4. 添加一个新的标准模块。
  5. 添加'@TestModule属性和创建的Rubberduck.AssertClass

    `@TestModule 
    
    Private Assert As Rubberduck.Assert 
    
  6. 开始编写测试实例。标记为'@TestMethod属性的任何Public Sub都将被Test Explorer发现并运行。

    '@TestMethod 
    Public Sub OnePlusOneIsTwo() 
        Assert.AreEqual 2, Add(1,1) 
    End Sub 
    

Unit Test Explorer

欲了解更多信息,请参阅Unit Testing page of the project's wiki

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

+0

伟大的信息。对于它的价值,链接wiki上的说明比这里给出的说明更新。 – epotter 2017-10-31 17:49:39

相关问题