PHPUnit 3.7.19 und Symfony2 haben die Tests gebrochen

Ich entwickle einige Tests für ein Symfony2.0-Projekt und führe sie mit PHPUnit aus.

Auf meinem PC funktioniert das einwandfrei, aber wenn Sie es in anderen Umgebungen versuchen, schlagen die Tests fehl. Ich dachte, das Problem sei die PHP-Version, aber nachdem ich sie in verschiedenen Umgebungen ausgeführt habe, bin ich verloren.

Meine Umgebung ist Ubuntu 12.04 und PHP 5.3.10 =>Funktioniert gut.

2 PC mit Ubuntu 12.10 und PHP 5.4.6:

Fatal error:  Call to a member function get() on a non-object

Dieser Fehler betrifft eine Klasse, die erweitert wirdSymfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase Dabei werden die Methoden setUp () und tearDown () überschrieben.

public function setUp()
{
    $this->client = static::createClient();
    $this->client->followRedirects(true);

    $crawler = $this->client->request('GET', '/admin/login');

    $loginForm = $crawler->selectButton('save')->form(array(
        '_username' => 'user',
        '_password' => 'pass'
        ));
    $this->client->submit($loginForm);

    $this->container = $this->client->getContainer();
    parent::setUp();
}

public function tearDown()
{
    //Here is get() on a non-object, $this->container doesn't exists
    $this->container->get('doctrine.odm.mongodb.document_manager')->getConnection()->close();
    parent::tearDown();
}

2 PCs, einer mit Ubuntu 12.10 und PHP 5.4.6 und einer mit Windows 7 und PHP 5.3.8:

PHP Fatal error:  Call to a member function getSite() on a non-object

Dieser Fehler betrifft eine Klasse, die die oben genannte Klasse erweitert, deren tearDown () -Methode falsch ist. In diesem Fall funktioniert diese Klasse jedoch und der Fehler ist anders, obwohl er mit $ this-> container zusammenhängt:

//In this case, the user doesn't exists
$site = $this->container->get('security.context')
        ->getToken()->getUser()->getSite();

Das Problem ist, ich weiß nicht, warum das so ist. Wenn dies mit PHP zusammenhängt, PHPUnit (wir haben alle die gleiche Version), Symfony2.0 oder SO.

Bearbeiten:

Ok, Probleme gelöst.

Zuerst:

Fatal error:  Call to a member function get() on a non-object

Hatte eine falsche Codezeile in der Klasse, die die Methoden setUp () und tearDown () enthält. Eine Zeile wie diese:

$link = $crawler->filter('a:contains("Test")')->eq(1)->link();

Ich hatte diese Zeile kommentiert, sorry :). Aber ich weiß nicht, warum PHPUnit mir diesen Fehler und nicht den Fehler der Linkmethode anzeigt.

Zweite:

PHP Fatal error:  Call to a member function getSite() on a non-object

In den anderen Umgebungen wurde die Testdatenbank nicht bereitgestellt.

Diese Frage hilft niemandem, sondern hilft mir, neue Dinge auszuprobieren. Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage