我在 Microsoft Access 中进行了一些相当广泛的开发,发现 AccUnit 可以很好地满足我的需求。作者的网站是德文的(但包含一些英文翻译),但是一旦你掌握了基本概念,它就会让单元测试很容易实现。
AccUnit 在后端使用 SimplyVBUnit 3.0 来支持单元测试,但我发现 AccUnit VBA 插件方法更易于在我的项目中实现。
安装
安装过程是described on the author's site,但本质上包括以下两项:
- 安装 SimplyVBUnit 3.0(请注意,SourceForge 上不再提供此功能,但 AccUnit 网站上提供了副本。)
- 安装从以上链接下载的 AccUnit 插件。
基本用法
安装后,您会在Tools 菜单下找到一个新的子菜单。点击AccUnit -> New Test -> Test Class with AccUnit-Features 为您的项目添加一个新的测试类模块。
您可以为模块命名任何您想要的名称,因此这将在一定程度上取决于您希望如何进行测试。有些人更喜欢为每个模块使用一个测试类,以使事情井井有条,而另一些人则在较小的项目中通过使用单个类进行单元测试来使事情变得简单。
示例代码有点神秘,但基本概念是,当你运行测试时,它会依次运行类中的所有 Subs,并显示测试结果。让我们做几个样本测试。
简单示例
假设我们有一个如下所示的函数(在标准模块中):
Public Function GetLowestNumber(FirstNum As Double, SecondNum As Double) As Double
If FirstNum < SecondNum Then
GetLowestNumber = FirstNum
Else
GetLowestNumber = SecondNum
End If
End Function
回到 AccUnit 测试类,我们现在可以做一个简单的测试来验证这个函数确实返回了最小的数字。
Public Sub basUtility_GetLowestNumber_Test1()
Assert.That GetLowestNumber(3, 4), Iz.EqualTo(3)
End Sub
现在,在 AccUnit 工具栏上,单击 Run all tests 按钮。然后将出现测试窗口并显示测试结果。 (如果你复制了上面的代码,它应该可以通过。):-)
设计行测试
但是,让这个工具非常强大的是它能够使用各种标准组合运行测试。在 AccUnit 中,他们称之为 行测试。要使用它,只需调整函数以接受参数并在函数上方的注释行中列出您的测试用例。
' AccUnit:Row(3,4,3).Name = "Smaller first"
' AccUnit:Row(4,3,3).Name = "Larger first"
' AccUnit:Row(3,3,3).Name = "Equal"
' AccUnit:Row(3.002,3.6,3.003).Name = "Decimals"
' AccUnit:Row(-3,3,-3).Name = "Mixed sign"
' AccUnit:Row(-7,-3,-7).Name = "Negative"
Public Sub basUtility_GetLowestNumber_RowTest(Num1 As Double, Num2 As Double, Expected As Double)
Assert.That GetLowestNumber(Num1, Num2), Iz.EqualTo(Expected)
End Sub
现在再次单击Run all tests,您将看到列出的结果。
请注意,单个行测试的结果嵌套在父测试下,并且显示了我们为它们提供的友好名称以便于参考。
另请注意,其中一项测试失败了。 (在这种情况下,这是行测试预期结果中的故意错误,只是为了演示失败的测试是什么样的。)双击失败的测试会跳转到我可以进一步调试的代码。
总结
我刚刚在这里分享了几个简短的示例,但在 AccUnit 中还有许多其他工具和功能可供探索。 (测试标签、忽略标志、代码模板等...)
希望这能让您对 Microsoft Access(或其他 VBA 产品)的这种特定单元测试选项有所了解。还有其他不错的选择,但对我来说,这提供了我一直在寻找的灵活性和简单性。