PHPUnit: Spotte alle Methoden außer einigen

8

Ich schreibe einen PHPUnit-Test, bei dem ich eine Abhängigkeit vortäuschen muss, aber ich brauche noch ein paar Methoden, damit es noch funktioniert. Ich habe:

%Vor%

Also habe ich so etwas gemacht:

%Vor%

Und alles ist in Ordnung, außer dass die Methode thisOneINeed() ausgespottet wird, damit der komplexe Code nicht ausgeführt wird und ich ihn für runSomeCode() ausführen muss, damit er ordnungsgemäß funktioniert. Dieser Code in thisOneINeed() ruft keine anderen Methoden auf, aber er wird für den richtigen Test benötigt und gibt keinen festen Wert zurück, so dass ich dort nicht einfach den statischen returnValue () setzen kann. Und AFAIK PHPunit hat keine Methode wie returnValue() , die "call parent" sagt. Es hat returnCallback() , aber es gibt keine Möglichkeit zu sagen, "rufen Sie diese Methode für Elternklasse" so weit ich sehen konnte.

Ich könnte die Liste aller Methoden in Dependency machen, thisOneINeed daraus entfernen und sie an setMethods() übergeben, wenn ich den Mock konstruiere, aber ich mag diesen Ansatz nicht, sieht kludgy aus.

Ich könnte das auch tun:

%Vor%

und dann MockDependency , um das Mock-Objekt zu erstellen, und das funktioniert auch, aber ich mag es nicht, den Mock manuell zu machen.

Gibt es einen besseren Weg, dies zu tun?

    
StasM 07.06.2012, 01:06
quelle

1 Antwort

9

Ich denke, wenn Sie den Mock-Builder von PHPUnit verwenden wollen, dann müssen Sie ein Array aller Methoden erstellen, das benötigte entfernen und an setMethods übergeben.

Ich persönlich fand es in vielen Fällen nützlich, eine Unterklasse von ReflectionClass zu haben, der ich Methoden hinzufügen kann, wenn ich sie brauche.

%Vor%

Sie könnten auch ein anderes Spott-Framework verwenden, das unterstützt, was Sie tun möchten. Zum Beispiel hat Phake eine thenCallParent Methode. Ich habe Phake kürzlich verwendet, weil ich die Parameter erfassen musste, die an eine Methode übergeben wurden. Es ist gut dokumentiert und einen Versuch wert.

    
Zach 07.06.2012, 16:14
quelle