Am 02.06.2010 21:49, schrieb Max Trense:
Die Ergebnisse von GibsDuMirMehr sind nicht gekapselt und ich kann auch
kein stub (mit $this->getMock('GibsDuMirMehr')) in hasteNichGesehen
injecten, ohne diesen von aussen als Parameter zu übergeben. Kennt ihr
ein besseres Verfahren?
Hmm, zunächst mal sind Unit-Tests grundsätzlich Blackbox-Tests, sie
testen also nicht die Funktionsweise einer Methode, sondern nur, ob die
Methode das zugesicherte Verhalten zeigt. Deine Methode soll "true"
zurückgeben und das testet Deine Test-Klasse. Mehr kannst Du in dem
Szenario von Unit-Testing nicht erwarten.
Tue ich auch nicht.
Darüber hinaus verwendet Dein Code keine Dependency-Injection, denn das
würde bedeuten, dass der Aufrufer die Kontrolle über die *Instanz*, die
in der Variable "fuellMich" gespeichert ist, hat (und damit das
Einfügen (die Dependency-Injection) einer solchen Instanz zur
Klassenschnittstelle der getesteten Klasse gehört). Wenn Du DI
verwendest, dann kann der Test vor dem Testen genau diese Funktionalität
nutzen, um einen Mock statt des produktiv verwendeten Objekts einzufügen.
Deine Verwendung des Begriffs Dependency Injection und die Notwendigkeit
meinerseits die Definition des Begriffs zu verstehen
(http://www.javaranch.com/journal/200709/dependency-injection-unit-testing.html)
brachte mich am Begriff "setter based injection" vorbei und genau das
ist die Lösung: ich erzeuge einen mock der Klasse GibsDuMirMehr, injecte
sie per setFuellMich() in die Klassenvariable und fasse den Teil des zu
prüfenden Code mit einem if () ein:
if (!isset) {
$this->fuellMich = new GibsDuMirMehr;
}
bzw. nachher besser wegen des code reuse Paradigmas:
if (!isset) {
$this->setFuellMich(new GibsDuMirMehr);
}
Eigentlich klingt Dein Beispiel aber eher so, als wolltest Du
Integrationstests durchführen.
Nope. Ich möchte durch die anfangs angestrebte Kapselung
Integrationstests verhindern.
Danke für die Nutzung von Fachbegriffen, die als Suchbegriffe eingesetzt
die Lösung zeigten...
Gruß
Silvério
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org