1

Nach this documentation, kann ich eine setUp() Funktion in meiner Test-Klasse schreiben, wie:Warum wird diese Methode ausgeführt, ohne dass sie aufgerufen wird?

use Doctrine\ORM\Tools\SchemaTool; 
use Liip\FunctionalTestBundle\Test\WebTestCase; 

class AccountControllerTest extends WebTestCase 
{ 
    public function setUp() 
    { 
     $em = $this->getContainer()->get('doctrine')->getManager(); 
     if (!isset($metadatas)) { 
      $metadatas = $em->getMetadataFactory()->getAllMetadata(); 
     } 
     $schemaTool = new SchemaTool($em); 
     $schemaTool->dropDatabase(); 
     if (!empty($metadatas)) { 
      $schemaTool->createSchema($metadatas); 
     } 
     $this->postFixtureSetup(); 

     $fixtures = array(
      'Acme\MyBundle\DataFixtures\ORM\LoadUserData', 
     ); 
     $this->loadFixtures($fixtures); 
    } 
//... 
} 

Aber wenn ich für die setUp() Methode in der erweiterten WebTestCase Klasse aussehen, ich finde es nicht. Mein Verständnis ist, dass ich eine Methode von Elternklasse in der Kindklasse neu definieren kann. Übergeordnete Klasse ist:

https://github.com/liip/LiipFunctionalTestBundle/blob/master/Test/WebTestCase.php

Bitte, mir zu erklären, warum und wann diese Methode ausgeführt werden? Danke

+1

https://github.com/sebastianbergmann/phpunit/blob /master/src/Framework/TestCase.php#L2210 Ging durch alle Klassen. Hier kommt die Methode her. –

+0

@E_p, vielen Dank jetzt verstehe ich. –

Antwort

2

setUp() wird eigentlich von PHPUnit verwendet, welches das Symfony-Testframework erweitert.

Werfen Sie einen Blick auf die PHPUnit Dokumentation für weitere Informationen: https://phpunit.de/manual/current/en/fixtures.html

Hier ist ein Link auf die aktuelle abstrakte Klasse, die Symfony erweitert: https://github.com/sebastianbergmann/phpunit/blob/master/src/Framework/TestCase.php#L2210

+1

Wenn Sie eine Klasse erweitern, sind Sie außerdem nicht darauf beschränkt, vorhandene Methoden neu zu definieren. Sie können völlig neue Methoden hinzufügen, die dann aufgerufen werden können, indem Sie Code auf der Straße verbrauchen. –

+0

Vielen Dank für Ihr informatives Feedback. Ich verstehe jetzt total. Ich habe vergessen, dass PHPUnit als integrierter Teil der Symfony2 Standard Edition kommt. Ich dachte, es kommt mit dem lifffunktionalen Testbundle. Dummer Fehler. –