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

Antwort per Email an