Ich begann mit Silex zu arbeiten und es ist einfach toll. Das Problem tritt auf, wenn ich versuche, meinen Unterricht richtig zu testen. Konkret die Verschlüsse :( In den folgenden Zeilen erklären ich mein Problem zu sehen, ob jemand von euch weiß, wie es zu lösen. Bitte, den Schwerpunkt nicht auf die Syntax aber die Prüfaufgaben selbst.Testing in Silex (Mock-Verschlüsse) mit PHPUnit
Ich habe einen Anbieter wie dies:
<?php
namespace Foo\Provider;
use Silex\Application;
use Silex\ServiceProviderInterface;
use Foo\Bar;
class BarProvider implements ServiceProviderInterface {
public function register(Application $app) {
$app[ 'foo_bar' ] = $app->protect(function() use ($app) {
return new Bar($app);
});
}
public function boot(Application $app) {}
}
Dann brauche ich eine Instanz des foo_bar Element zu erhalten.
<?php
namespace Foo;
use Silex\Application;
class Clazz {
protected $bar;
public function __construct(Application $app) {
$this->bar = $app[ 'foo_bar' ]();
}
}
Das funktioniert ganz gut die Sache ist, dass ich entwickle mit TDD (und PHPUnit) und es ist mir unmöglich, die Clazz-Klasse richtig zu testen.
<?php
namespace Foo\Test;
use PHPUnit_Framework_TestCase;
use Silex\Application;
use Foo\Bar;
use Foo\Clazz;
class ClazzTest extends PHPUnit_Framework_TestCase {
public function testConstruct() {
$mock_bar = $this->getMock('Foo\Bar');
$mock_app = $this->getMock('Silex\Application');
$mock_app
->expects($this->once())
->method('offsetGet')
->with('foo_bar')
->will($this->returnValue($mock_bar));
new Class($mock_app);
}
}
Das Problem liegt hier in der "()" nach dem $ app [ 'foo_bar'] in der Clazz Klasse. Beim Versuch, den Test, den ich eine bekommen auszuführen: Fehler „PHP Fatal error Funktionsname eine Zeichenfolge in ... sein muss“. Ich verstehe, dass ich die Klasse nicht Unit-Test auf diese Weise testen kann, aber ich sehe nicht den richtigen Weg, um es zu tun.
Wie konnte ich diese Aussage testen (weil am Ende der einzige komplexe Aussage $ this-> bar = $ app 'foo_bar';)?
Vielleicht ist die Github finden Sie einige Anregungen geben: https://github.com/fabpot/Silex/tree/master/tests/Silex/Tests – qrazi
Ich habe bereits versucht, dass aber könnte ein gutes Beispiel nicht gefunden :( – ThisIsErico