Expertenbeitrag

 Mark Hermeling

Mark Hermeling

Senior Director Product Marketing, GrammaTech, Inc., GrammaTech, Inc.

Überblick und Anwendung von Mock-Funktionen
Mock-Funktionen helfen bei Modultests von C-Programmen

Von Mark Hermeling 4 min Lesedauer

Unabhängig davon, ob Sie auf das Credo des ‚Test Driven Development‘ setzen und das Testen an die erste Stelle setzen, gelten automatisierte Modultests doch generell als etwas, was der Softwarequalität dienlich ist.

Mock-Funktionen erleichtern Modultests bei C-Programmen.(Bild:   / CC0)
Mock-Funktionen erleichtern Modultests bei C-Programmen.
(Bild: / CC0)

Weshalb sollte man auf Mock-Funktionen zurückgreifen? Unabhängig davon, ob Sie auf das Credo des ‚Test Driven Development‘ setzen und das Testen an die erste Stelle setzen, gelten automatisierte Modultests doch generell als etwas, was der Softwarequalität dienlich ist. Oftmals gibt es in Softwaresystemen bestimmte Teile, mit denen sich Modultests relativ einfach durchführen lassen. Meist handelt es sich dabei um wiederverwendbare Bibliotheken und andere Module in den Randzonen der Funktionalität eines Systems. Als schwierig kann sich dagegen das Testen der zentralen Funktionen eines Systems erweisen, also von Bestands-Code, bei dessen Entwicklung die Prüfbarkeit nicht berücksichtigt wurde, oder aber von solchem Code, der an das Verhalten der Hardware gebunden ist. Das Gliedern der Funktionalität in kleine, prüfbare Einheiten ist in diesen Situationen nicht immer einfach.

Wann nutze ich eine Mock-Funktion?

Einige dieser Probleme könnten durchaus per Refactoring, also durch eine Neugliederung des Codes gelöst werden. In der Praxis ist dies jedoch nicht immer möglich (man denke nur an Hindernisse wie die Change-Management-Prozesse, den Zeitaufwand für das Refactoring, die Risiken beim Refactoring von Code, für den noch keine Modultests durchgeführt wurden, usw.). Bei nicht objektorientierten Sprachen wie C können Modultests besondere Herausforderungen verursachen, da die Sprache keine Interface-Primitives mitbringt, mit denen sich einfach zwischen realem und testweisem Code wechseln lässt. Hier empfiehlt sich die Verwendung von Mock-Funktionen (Scheinfunktionen). Diese stellen in prozeduralen Sprachen das Gegenstück von Mock-Objekten dar („Endo-Testing: Unit Testing with Mock Objects", Mackinnon, et. al.) und können Hilfestellung beim Prüfen dieser schwierig erreichbaren Abschnitte Ihres Codes leisten.