AccUnit

Unit Testing in VBA - Microsoft Access, Excel, …

Tests erstellen

Aus AccUnit
Wechseln zu: Navigation, Suche

Zum Erstellen von Tests werden Klassen verwendet. Alle öffentlichen Methoden einer Testklasse werden von SimplyVBUnit als Test-Methode verwendet.

Einfachste Form einer Testklasse

Option Explicit
 
' AccUnit:TestClass

Public Sub SimpleTestProc_Success()
 
   Assert.That 1, Iz.EqualTo(1)
 
End Sub
 
Public Sub SimpleTestProc_Failure()
 
   Assert.That 1, Iz.EqualTo(0)
 
End Sub

AccUnit:TestClass sorgt dafür, dass dieser Test vom AccUnit-Add-In aus den Klassen des VB-Projektes erkannt wird.

Row Tests

Bei Row Tests wird eine Testmethode mit unterschiedlichen Parameterwerten ausgeführt. Damit SimplyVBUnit diese Tests erkennt, muss SimplyVBUnit.ITestCaseData als Schnittstelle verwendet werden.

Implements SimplyVBUnit.ITestCaseData
 
Private Sub ITestCaseData_GetTestData(ByVal test As SimplyVBUnit.TestDataBuilder)
   ' hier erfolgt die Übergabe der Test-Werte
End Sub

Um die Übergabe der Testwerte etwas übersichtlicher zu gestalten, kann noch zusätzlich AccUnit_Integration.ITestManagerBridge implementiert werden. Damit wird es möglich, die Testwerte als Kommentarzeile oberhalb der jeweiligen Testmethode zu schreiben.

Implements AccUnit_Integration.ITestManagerBridge
Implements SimplyVBUnit.ITestCaseData
 
Private TestManager As AccUnit_Integration.TestManager
 
Private Sub ITestManagerBridge_InitTestManager(ByVal NewTestManager As AccUnit_Integration.ITestManagerComInterface)
   Set TestManager = NewTestManager
End Sub
 
Private Function ITestManagerBridge_GetTestManager() As AccUnit_Integration.ITestManagerComInterface
   Set ITestManagerBridge_GetTestManager = TestManager:
End Function
 
Private Sub ITestCaseData_GetTestData(ByVal test As SimplyVBUnit.TestDataBuilder)
   TestManager.GetTestData test
End Sub
 
'TestManager.Row("a", "b", "ab")
'TestManager.Row("abc", "def", "abcdef")
Public Sub RowTest_Sub_Strings(ByVal x As String, ByVal y As String, ByVal expected As String)
 
   Dim actual As String
   actual = x + y
 
   Assert.That actual, Iz.EqualTo(expected)
 
End Sub

Die Dummy-Methode Row ermöglicht die Nutzung von IntelliSense, wenn die Code-Zeile erst nach dem Schreiben der Parameterwerte auskommentiert wird.

Als weitere Variante kann statt TestManager.Row der Prozedurname verwendet werden.

'RowTest_Sub_Strings("a", "b", "ab")
'RowTest_Sub_Strings("abc", "def", "abcdef")
Public Sub RowTest_Sub_Strings(ByVal x As String, ByVal y As String, ByVal expected As String)

AccUnit Integration

Um die volle Funktionsfähigkeit von AccUnit zu nutzen, ist es erforderlich, zusätzlich zu ITestManagerBridge noch SimplyVBUnit.ITestFixture zu implementieren.

Option Compare Text
Option Explicit
 
'AccUnit:TestClass

'####################################################################
' Interfaces
'
'SimplyVBUnit: ITestFixture.AddTestCases
Implements SimplyVBUnit.ITestFixture
 
'AccUnit: test manager
Implements AccUnit_Integration.ITestManagerBridge
Private TestManager As AccUnit_Integration.TestManager
 
Private Sub ITestManagerBridge_InitTestManager(ByVal NewTestManager As AccUnit_Integration.ITestManagerComInterface)
   Set TestManager = NewTestManager
End Sub
 
Private Function ITestManagerBridge_GetTestManager() As AccUnit_Integration.ITestManagerComInterface
   Set ITestManagerBridge_GetTestManager = TestManager:
End Function
 
Private Sub ITestFixture_AddTestCases(ByVal SvuTestCaseCollector As SimplyVBUnit.TestCaseCollector)
   TestManager.AddTestCases SvuTestCaseCollector
End Sub
 
'####################################################################
' Tests
'
...

Mit diesem Klassenkopf wird es möglich, einzelne Tests über AccUnit ausführen zu lassen.


Weiterführende Links: Funktionsweise von datengetriebenen Tests in SimplyVBUnit v3

Persönliche Werkzeuge