为什么这个方法没有被调用就被执行了?

时间:2016-07-14 21:52:03

标签: php symfony inheritance functional-testing liipfunctionaltestbundle

根据this documentation,我可以在我的测试类中编写setUp()函数,例如:

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);
    }
//...
}

但是当我在扩展的WebTestCase类中查找setUp()方法时,我找不到它。我的理解是我可以从子类中的父类重新定义一个方法。父类是:

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

请向我解释为什么以及何时执行此方法?谢谢

1 个答案:

答案 0 :(得分:2)

setUp()实际上是由PHPUnit使用的,Symfony测试框架扩展了它。

查看PHPUnit文档以获取更多信息:https://phpunit.de/manual/current/en/fixtures.html

这里是Symfony正在扩展的实际抽象类的链接:https://github.com/sebastianbergmann/phpunit/blob/master/src/Framework/TestCase.php#L2210