有没有人有单位测试Excel VBA代码的经验?我想尽可能轻松地将单元测试引入一些传统的Excel VBA代码中。我的一个想法是使用VSTO从Excel工作簿中调用代码。我想知道其他人是否为了单元测试Excel代码以及他们可能用于单元测试Excel VBA的任何其他方法而尝试过此操作。
对于有关单元测试Excel VBA代码的任何可用框架和/或技巧,我将不胜感激。
答案 0 :(得分:33)
免责声明:我拥有Rubberduck的GitHub存储库,而且我是参与该项目的开发人员之一。
Rubberduck正在积极发展中。它不仅仅是VBA的单元测试工具很多,但它运行良好,让你可以在没有任何样板的情况下编写VBA单元测试:
'@TestModule
Private Assert As New Rubberduck.AssertClass
'@TestMethod
Public Sub TestMethod1()
Assert.Inconclusive "Test method is not written yet."
End Sub
'@TestMethod
Public Sub AnotherTestMethod()
Assert.IsTrue False, "Something's wrong?"
End Sub
然后你可以在一个停靠的工具窗口中导航并运行你的测试方法,它还为你提供了快速添加 arrange-act-assert 方法存根的菜单,AssertClass
可以是后期也是如此,所以你不必担心在开发环境以外的任何地方部署Rubberduck只是为了保持代码可编辑。
Rubberduck的GitHub存储库中的unit testing wiki page解释了几乎所有有关使用它的内容。
最新的2.1预发布版本包括假冒" fakes"框架,可以用来劫持一些通常会干扰单元测试的标准库调用,通过将标准库转换为"测试假货"可以设置为在Rubberduck单元测试的上下文中执行时指定的行为,例如MsgBox
调用:
'@TestMethod
Public Sub TestMethod1()
On Error GoTo TestFail
Fakes.MsgBox.Returns 42 ' MsgBox function will return 42
'here you'd invoke the procedure you want to test
Debug.Print MsgBox("This MsgBox isn't going to pop up!", vbOkOnly, "Rubberduck") 'prints 42
With Fakes.MsgBox.Verify ' Test will pass if MsgBox was invoked as specified
.Parameter "prompt", "This MsgBox isn't going to pop up!"
.Parameter "buttons", vbOkOnly
.Parameter "title", "Rubberduck"
End With
TestExit:
Exit Sub
TestFail:
Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description
End Sub
扩展Fakes
API以涵盖更多功能的贡献非常受欢迎。覆盖FileSystemObject
次调用特别有用。
答案 1 :(得分:6)
我只是在寻找相同的东西,发现:http://accunit.access-codelib.net/很好地集成到了VBA IDE中。
注意:使用德语查看页面并使用浏览器翻译工具似乎比英文页面提供更多信息。
答案 2 :(得分:3)