pl: Perl & LWP::UserAgent & Cookie setzen

Beitrag lesen

Klassen, die sich ihre Abhängigkeiten selbst beschaffen, sind nicht isoliert testbar. Isolierte Tests sind aber wichtig, um automatisiert Codeteile testen zu können und damit eine fortlaufende Integration von Softwareänderungen zu ermöglichen.

Meine Antwort hierzu ist die Factory.

Wenn sich Klassen ihre Abhängigkeiten über Aufrufe einer Factory beschaffen, brauchst Du eine konfigurierbare Factory, um bei Unittests die Mocks/Stubs unterschieben zu können. D.h. du verschiebst die Injektion aus den Konstruktorparametern in die Factory. Aber eigentlich hast Du nur einen DI-Container gebaut.

Nein. Der Unterschied von Lazy Delegation (über die Factory) zu legacy DI besteht darin, dass die Abhängigkeit nicht außerhalb der eigenen Klasse hergestellt wird sondern in einer eigenen Methode. Also sowas:

# file param.pm

require xCGI;

*param = sub{
  my $self = shift;
  $self->{CGI} = xCGI->new() unless defined $self->{CGI};
  return $self->{CGI}->param(@_);
};

Mocking: Sofern in dieser Datei keine package definiert ist, kann sie mit beliebigen Instanzen beliebiger Klassen aufgerufen werden. Also auch mit einer Attrappe (Mock). Zu Konfigurieren ist da nichts.

MfG