VBA-Funktionen testen

Wenn Sie VBA-Funktionen entwickeln, sollen diese reproduzierbare und für alle übergebenen Parameterwerte korrekte Ergebnisse liefern. Manch einer testet die Funktion dann für einen Wert, erhält das gewünschte Ergebnis, erhält für einen anderen Wert ein falsches Ergebnis, ändert die Funktion … und: Irgendwann stellt sich heraus, dass diese nach den änderungen nicht mehr das korrekte Ergebnis für den eingangs verwenden Parameter liefert. Hier hilft es, wenn Sie das Entwickeln von VBA-Funktionen etwas systematischer angehen, nämlich mit organisierten Tests. Dabei testen Sie die Funktion mit allen Parameterwerten, die Ihnen einfallen und wiederholen diese Tests auch nach änderungen an der Funktion, um sicherzustellen, dass die änderung der Funktion die Ergebnisse nicht beeinflusst. Wie das gelingt, zeigen wir in diesem Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1905_VBAFunktionenTesten.accdb.

Schnell mal programmiert

Eine VBA-Funktion ist mal mehr, mal weniger anspruchsvoll. Einfache Prozeduren, die vielleicht nur einen Datenbankaufruf kapseln sollen, brauchen kaum für viele verschiedene Fälle getestet zu werden. Aber je mehr verschiedene Eingabewerte eine Funktion hat und desto komplexer und umfangreicher die enthaltenen Anweisungen werden, umso wichtiger wäre es, während der Entwicklung der Funktion regelmäßig zu prüfen, ob diese für alle Fälle, für die sie vorgesehen ist, noch funktioniert.

Das ist insbesondere dann gefragt, wenn ein Eingabewert auftaucht, den die Funktion nicht in der gewünschten Weise verarbeitet – was bedeutet, dass sie nicht das erwartete Ergebnis liefert. Dann ändert man die Funktion so, dass sie auch auf die neuen Eingabewerte wie erwartet reagiert. Aber prüft man dann auch immer automatisch, ob die Eingabe- und Ausgabewerte, an die man die Funktion vorher angepasst hat, noch passen Das ist vielleicht nicht der Fall, und dort liegt eine mögliche Fehlerquelle.

Anhand von Funktionen möchten wir in diesem Artikel aufzeigen, wie Sie automatisierte Tests von Code aufbauen können. Das erfordert zwar auf den ersten Blick zunächst mehr Programmieraufwand, aber wenn Sie den Code später anpassen wollen, sparen Sie viel Zeit, weil alle Tests, die Sie bis dahin durchgeführt haben, nun per Mausklick erledigt werden können.

Ein Beispiel ist eine Funktion aus dem Artikel Feldinhalte aufteilen. Hier haben wir eine Funktion programmiert, mit der wir die Bestandteile einer Adressangabe, in diesem Fall Straße und Hausnummer, auf zwei Zeichenketten mit Straße und Hausnummer aufteilen wollen. Die Funktion hat die folgende Kopfzeile:

Public Function StrasseUndHausnummer(         strStrasseUndHausnummer As String, strStrasse           As String, strHausnummer As String) As Boolean

Dabei erfasst der erste Parameter die zu verarbeitende Zeichenkette, der zweite und dritte liefert das Ergebnis der Funktion zurück. Der Rückgabewert gibt als Boolean-Wert an, ob die Funktion überhaupt ordnungsgemäß funktioniert hat.

Das ist eine Form, mit der wir beim automatisierten Testen gut arbeiten können. Wenn die Funktion nur einen Rückgabewert hat und nicht wie in diesem Fall gleich zwei beziehungsweise drei, können Sie den Rückgabewert auch direkt als Funktionswert zurückgeben.

Wir wollen die Funktion nun mit verschiedenen Aufrufen testen, wobei wir immer andere Kombinationen aus Straßenname und Hausnummer übergeben:

  • Straße und Hausnummer mit Leerzeichen dazwischen,
  • Straßen, die bereits Leerzeichen im Straßennamen enthalten,
  • Straße und Hausnummer, bei denen zwischen dem Punkt von „Str.“ und der Hausnummer kein Leerzeichen ist oder auch
  • Straßen, bei denen die Hausnummer selbst Leerzeichen enthält (2 a).

Wenn wir eine Funktion erstellen wollen, die all diese Konstellationen wie gewünscht verarbeitet, müssen wir in der Funktion entsprechend viele Fälle berücksichtigen. Und um sicherzustellen, dass man beim Anpassen der Funktion auf einen neuen Fall auch die anderen Fälle noch berücksichtigt, sollte man alle bekannten Fälle nach jeder änderung nochmals prüfen.

Ich schreibe bewusst von „allen bekannten Fällen“, denn der Benutzer ist gnadenlos und wird Möglichkeiten finden, um Ihre Funktion zum Versagen zu bringen. Doch das ist dann nur eine weitere Aufgabe, die es zu lösen gilt und das ist viel einfacher, wenn man wie nachfolgend beschrieben Testroutinen für die zu erstellende Funktion programmiert hat.

Access [basics]

Unser exklusives Angebot für Dich!

Access im Unternehmen
7,90 € im Monat*

(Das Abo ist jederzeit monatlich kündbar)

Hier geht’s weiter →

Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.

PayPal VISA Mastercard SEPA
Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →