das klingt für mich wenig zielführend, als wenn man bei einer Methode
/**
- Gibt die Summe von a und b.
*/
double y sum(double a, double b)
einerseits den Vertragstext im Kommentar als dann auch getrennt die Implementierung testen würde…,
dazu schreibt man keine zwei Tests (naja, bei TDD weiß man nie…), genausowenig einen ‚Test des Interfaces‘
für die Kategorie der ‚sinnvollen Tests‘
ist es egal ob ein Interface oder eine einzelne Klasse vorliegt oder ein Test
nacheinander für verschiedene Subklassen eines in Oberklasse definierten Verhaltens (Polymorphie ganz ohne Interface) ausgeführt wird,
genau so wie es auch im Java-Code der Fall ist,
irgendwas kommt rein, dessen Methoden werden nach dem Methodenvertrag geprüft,
internes Verhalten weitgehend egal (wenn mal eine DB zu mocken ist, ist Wissen dazu natürlich unumgänglich),
wenn Ergebnis stimmt dann ist alles ok,
die Implementierung(en) meistern den Test, erfüllen den Vertrag, egal ob jeweils a + b direkt ausrechnet, nur ein festes Dummy-Ergebnis zurückgegegen,
welches zufällig zum Test passt, oder in einer DB nachgeschlagen wird, mit etwas Glück schafft es auch ein Zufallsgenerator…,
egal ob double y sum(double a, double b)
eine Klassenmethode oder ein Interface war
einen Test auf ein Interface zu schreiben macht für den Test nur das, was Interface auch sonst leistet: gemeinsamer Code für verschiedene Implementierungen,
die Implementierungen müssen als Klasse nicht für die Testklasse bekannt sein, je nachdem wie der Aufruf funktioniert,
private in bestimmten packages, müssen zum Zeitpunkt des Test-Schreibens noch gar nicht existieren,
das sind die Unterschiede gegenüber Test auf eine Klasse (mit denselben Methoden),
genau wie jede andere Programmier-Verwendung von Interface gegenüber einer Klasse (mit denselben Methoden)
ein Test speziell auf das Interface, unter Bewußtsein dass ein Interface vorliegt, das gibt es eher nicht,
edit: freilich kann eine Klasse A die Methoden von Interface B haben, dazu eigene Methoden,
daneben eine Klasse C die Methoden von Interface B und auch eigene Methoden
dann kann es sinnvoll sein, Tests hinsichtlich Interface B zu schreiben, sie mit A und C auszufühen, und für A und C sonst den kleineren jeweiligen Rest noch einzeln zu testen,
so gesehen mag man „eine Testklasse für Interface B“ haben, mit A und C ausgeführt, und kleinere Testklassen für A und C einzeln,
aber die testet nicht das Interface an sich…