Unit testing in MS Access

后端 未结 4 1362
我在风中等你
我在风中等你 2021-02-01 07:32

I have an Access database project that is getting a bit to large to try to keep track of in my head. I know it is a little late in the game, but better late than never right?

4条回答
  •  爱一瞬间的悲伤
    2021-02-01 08:03

    I do some fairly extensive development in Microsoft Access, and have found AccUnit to meet my needs quite nicely. The author's site is in German (but includes some English translation) but once you get the basic concepts it makes unit testing very easy to implement.

    AccUnit uses SimplyVBUnit 3.0 on the back end to power the unit testing, but I find the AccUnit VBA add-in approach simpler to implement in my projects.

    Installation

    The installation process is described on the author's site, but essentially includes the following two items:

    • Install SimplyVBUnit 3.0 (note that this is no longer available on SourceForge, but a copy is available on the AccUnit site.)
    • Install the AccUnit add-in downloaded from the link above.

    Basic Usage

    After installing, you will find a new sub-menu under the Tools menu. Click AccUnit -> New Test -> Test Class with AccUnit-Features to add a new testing class module to your project.

    Add new unit test

    You can name the module anything you want, so this will depend a little on how you want to do the testing. Some people prefer a test class for every module, to keep things organized, while others keep things simple in smaller projects by using a single class for unit tests.

    Unit test class

    The sample code is a little cryptic, but the basic concept is that when you run tests, it is going to sequentially run all the Subs in the class, and display the test results. Let's make a couple sample tests.

    Simple Example

    Let's say we have a function (in a standard module) that looks like this:

    Public Function GetLowestNumber(FirstNum As Double, SecondNum As Double) As Double
    If FirstNum < SecondNum Then
        GetLowestNumber = FirstNum
    Else
        GetLowestNumber = SecondNum
    End If
    End Function
    

    Back in the AccUnit test class, we could now make a simple test to verify that this function indeed returns the lowest number.

    Public Sub basUtility_GetLowestNumber_Test1()
        Assert.That GetLowestNumber(3, 4), Iz.EqualTo(3)
    End Sub
    

    Now, on the AccUnit toolbar, click the button to Run all tests. The test window will then appear and show the results of the test. (It should pass, if you copied in the above code.) :-)

    enter image description here

    Designing a Row Test

    But what makes this tool very powerful is the ability to run a test using various combinations of criteria. In AccUnit they call this a Row Test. To use it, simply adjust the function to accept parameters and list your test cases in comment lines above the function.

    ' 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
    

    Now click Run all tests again, and you will see the results listed.

    Row test example

    Notice that the results of the individual row tests are nested under the parent test, and the friendly names we gave them are shown for easy reference.

    Also note that one of these tests failed. (In this case it was an intentional error in the row test expected result, just to demonstrate what a failed test looks like.) Double-clicking the failed test jumps to the code where I can debug things further.

    Summary

    I have just shared a couple brief examples here, but there are a number of additional tools and features to explore in AccUnit. (Test tags, ignore flag, code templates, etc...)

    Hopefully this gives you a bit of a flavor of this particular Unit Testing option for Microsoft Access (or other VBA products). There are other good options out there, but for me, this provided the flexibility and simplicity I was looking for.

提交回复
热议问题