有什么好的Excelunit testing包

有什么好的框架,可以帮助在Excel中unit testing代码?

我假设你想unit testing模块中的VBA代码。
首先,即使VBA有一个好的unit testing框架,由于依赖于工作簿本身,我怀疑testing会非常复杂。 如果你的代码与工作簿交互,它的对象将是一个完全的噩梦,因为你不能真的嘲笑任何这一点:想象一下testing一个模块,读取工作表中的数据,并在另一个表中创build一个图表…本质上,Excel工作簿将您的持久性,域和演示文稿合并为一个 – 不适合testing。
另一种情况是主要是面向计算的代码。 如果代码变得足够复杂以至于无法保证testing,那么您可能会考虑的一件事是将您的代码实际移到VBA之外,以使其成为可testing的代码。 我经常与拥有大量财务模型,沉重的VBA的客户合作,以​​及何时可以将VBA代码提取到C#并使其成为VSTO插件。 好处是我可以testing代码,并在Visual Studio中工作,而不是VBA IDE。

在互联网上有几个实验: EUnit和VBAUnit 。 这些项目似乎都没有活跃的社区,所以它们不可能像JUnit或NUnit那样健壮。 但他们可能已经足够你的目的。

我使用Debug.Assert 。 我在模块中组织testing。 在每个模块中,我都维护一个Sub RunAll ,它调用该模块中的所有testing方法。

为了运行项目中的所有testing,我有一个模块AllTests和一个在所有testing模块中调用RunAll的RunAll。

简单,没有任何大惊小怪的作品。

有关VBA Debug.Assert的MSDN文章

我写了一篇关于如何使用Python的unit testing基础架构轻松编写VBAunit testing的博客文章,同时也介绍了一般的单元逻辑: https : //www.zoomeranalytics.com/blog/unittests-for-microsoft-excel

实质上,您可以testing以下VBAfunction:

 Function mysum(x, y) As Double mysum = x + y End Function 

在Python中使用以下unittest:

 import unittest import xlwings as xw class TestMyBook(unittest.TestCase): def setUp(self): # setUp will be called before the execution of each unit test self.wb = xw.Book('mybook.xlsm') # map workbook self.mysum = self.wb.macro('Module1.mysum') # map function def test_mysum(self): result = self.mysum(1, 2) # get result from VBA self.assertAlmostEqual(3, result) # test if result corresponds to the expected value if __name__ == '__main__': # This allows us to easily run the tests from the command prompt unittest.main() 

我很惊讶没有发现其他build议中的Rubberduck 。 这是一个COM插件的VBE(所有MS Office主机:Excel,Word,PowerPoint中,访问),开源和积极的发展。 其主要function是unit testing和代码检查。

以上链接维基页面的简要说明:

为什么Rubberduck?

因为我们想要一个宠物项目,而这个项目很有趣,而且很有挑战性。 我们的想法是尽我们所能在VBA中进行编程,并重构传统的VBA代码,就像在Visual Studio的现代版本中一样。 只要我记得VBE就有VB6的感觉,Rubberduck就是这么认为的……在其他地方。

这一切都是从Code Review开始的,在VBA中有一个关于unit testing的文章。 它成长为一个100%的VBA工作解决scheme,然后我们希望将这个unit testingfunction集成到IDE中 – COM插件解决scheme就是从这个解决scheme开始的。

在COM加载项中可以访问整个VBE对象模型,可以添加自定义菜单,工具栏和可停靠窗口,但是我们想要parsing和检查代码,并修复问题 – 或者至less指出问题。

那么我们只是想让我们打包一切,我们要实现扩展VBE。 我们添加了更方便地导航代码的方法,一个todo项目列表,然后我们有了整合源代码pipe理,实现一些重构的想法,使用Stack Exchange API创build和发布您的VBA代码作为代码审查问题。

我已经使用了大约半年(主要是在Excel 2010下),而且它已经非常稳定和有帮助。 因此,我会推荐它。