Hallo pl,
Beim Wetter stimme ich Dir zu. Das ist in Köln auch recht übel.
Aber der Rest wird jetzt langsam doch wirr. Oder ich verwirrt? Passiert gerade das, was Dir schon andere geschrieben haben: Du verwendest eine eigene Sprache, deren Begriffe Homonyme zur allgemein verwendeten Begriffswelt der Informatik sind - aber nicht identisch damit?
Mocking implementiert keine Entkopplung, es ist andersrum. Mocking wird erst durch Entkopplungsmechanismen möglich. Mocking bedeutet nach meiner Kenntnis, dass irgendeine Komponente A eine Komponente B benötigt, statt dessen aber zu Testzwecken eine Komponente B' bekommt, die so tut als wäre sie B. Bei Dir wäre das eine Möglichkeit, der xCGI Klasse ein gefälschtes Environment vorzugaukeln, aus dem sie den Query-String lädt, statt den Test-Querystring ins echte Environment zu schreiben.
Dieser Environment-Accessor, den Du dann mocken müsstest, wäre dann eine möglichst kleine und dumme Klasse, die man selbst nicht unittesten kann, weil sie dazu da ist, auf die echte Umgebung zuzugreifen. Das Environment zu manipulieren, um ein Testszenario zu schaffen, ist kein Unittest. Es ist ein Test - ja - aber kein UNIT Test.
Classless methods, wie Du sie beschrieben hast - also letztlich Funktionen, die wissen, dass sie als ersten Parameter ein Klassenobjekt bekommen - führen nach meinem Verständnis zu einem globalen Chaos, weil sie dann nicht mehr Teil einer Klasse (und damit eines Namens-Containers) sind. Du setzt in deinem Beispiel doch implizit voraus, dass eine Methode param nur innerhalb der xCGI Klasse existiert. Das kann ich nicht als gutes Beispiel nachvollziehen.
Dein Codebeispiel finde ich auch merkwürdig:
my $name = 'param';
require "$name.pm";
if( $mock->can($name) ) {
if( $mock->param('mock') ){
print "Methode $name funktional";
}
}
Überall wird mit $name gearbeitet (was vermutlich analog zu PHP auch innerhalb eines Strings aufgelöst wird), nur der Aufruf selbst geht dann direkt auf die param Methode. Was hilft Dir die Flexibilität in $name, wenn sie im eigentlichen Aufruf nicht passiert?! (Dass Du nicht prüfst, ob 123 zurückkommt, liegt vermutlich daran dass das nicht das Testziel in diesem Test war...).
Rolf
Dosen sind silbern