Ich brauche eine Mock-Implementierung einer Klasse - zu Testzwecken - und frage mich, wie ich am besten vorgehen soll. Ich kann mir zwei allgemeine Möglichkeiten vorstellen:
- Erstellen Sie ein Interface, das alle öffentlichen Funktionen der Klasse als reine virtuelle Funktionen enthält, und erstellen Sie dann eine Mock-Klasse, die davon abgeleitet ist.
- Markieren Sie alle Funktionen (nun, zumindest alle, die gemockt werden sollen) als virtual.
Ich bin es gewohnt, es auf die erste Weise in Java zu machen, und das ist auch ziemlich häufig (wahrscheinlich, da sie einen dedizierten Interface-Typ haben). Aber ich habe solche interface-lastigen Designs in C++ kaum gesehen, daher frage ich mich.
Die zweite Methode wird wahrscheinlich funktionieren, aber ich kann nicht anders, als sie irgendwie hässlich zu finden. Macht das irgendjemand?
Wenn ich dem ersten Weg folge, brauche ich etwas Unterstützung bei der Namensgebung. Ich habe ein Audiosystem, das für das Laden von Sounddateien und das Abspielen der geladenen Tracks verantwortlich ist. Ich verwende dafür OpenAL, daher habe ich das Interface "Audio" und die Implementierung "OpenALAudio" genannt. Dies impliziert jedoch, dass der ganze OpenAL-spezifische Code in diese Klasse muss, was sich irgendwie einschränkend anfühlt. Eine Alternative wäre, den Namen der Klasse "Audio" zu belassen und einen anderen für das Interface zu finden, z.B. "AudioInterface" oder "IAudio". Was würden Sie vorschlagen, und warum?