PHPUnit - Mock S3Client funktioniert nicht gut

8

Bibliothek: "aws / aws-sdk-php": "2. *"
PHP Version: PHP 5.4.24 (cli)

composer.json

%Vor%

Wir haben einen AwsWrapper erstellt, um die funktionalen Aktionen zu erhalten: uploadFile, deleteFile ...
Sie können die Klasse lesen, wobei die Abhängigkeitsinjektion als Einheit getestet wird.
Konzentriere dich auf Konstruktor und inneren $ this- & gt; s3Client- & gt; putObject (...) rufe die uploadFile-Funktion auf.

%Vor%

Die Testdatei enthält unsere Injector- und die S3Client-Instanzen als ein PhpUnit-MockObject. Um S3Client zu verspotten, müssen wir den ursprünglichen Konstruktor mit dem Mock Builder deaktivieren.

Um S3Client zu verhöhnen:

%Vor%

Um den inneren Aufruf von putObject zu konfigurieren (case zum Testen mit putObject throw S3Exception, aber wir haben das gleiche Problem mit $ this- & gt; returnValue ($ expected).

Init Test Class und konfigurieren sut:

%Vor%

Nicht funktionierender Code:

%Vor%

Wenn wir unsere Testfunktion ausführen, wirft der injizierte S3Client weder die Ausnahme noch gibt er den erwarteten Wert zurück, sondern gibt immer NULL zurück.

Mit xdebug haben wir gesehen, dass das S3Client MockObject korrekt konfiguriert ist, aber nicht so funktioniert wie es nach Belieben konfiguriert wurde ().

Eine "Lösung" (oder eine schlechte Lösung) könnte einen S3ClientWrapper machen, dadurch wird das Problem nur auf andere Klassen verschoben, die nicht mit Mocks Unit-getestet werden konnten.

Irgendeine Idee?

AKTUALISIEREN Screenshot zum Konfigurieren von MockObject mit xdebug:

    
PituSabadí 06.06.2014, 11:03
quelle

1 Antwort

10

Der folgende Code funktioniert und wird wie erwartet übergeben, daher denke ich nicht, dass Sie auf irgendwelche Einschränkungen stoßen, die durch PHPUnit oder das AWS SDK verursacht werden.

%Vor%

Sie können auch das Guzzle MockPlugin verwenden, wenn Sie nur nachspielen möchten die Antwort und kümmern sich nicht um Spott / Stubbing der Objekte.

    
Jeremy Lindblom 06.06.2014, 17:51
quelle

Tags und Links