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

Why this method get executed without being called?

根据this documentation,我可以在我的测试class中写一个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 class 中寻找 setUp() 方法时,我没有找到它。我的理解是可以在childclass中从parentclass重新定义一个方法。 Parent class 是:

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

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

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

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

这是 Symfony 正在扩展的 class 实际摘要的 link:https://github.com/sebastianbergmann/phpunit/blob/master/src/Framework/TestCase.php#L2210