在Symfony 3上所有Phpunit测试之前,负载固定装置一次



i ve获得了SF3应用程序和大量函数测试。在每次测试之前,我们加载并清除所有固定装置。所有测试的时间都这么长。我想在上次测试后仅一次截断一次固定装置。

这是提高机舱测试速度的好方法吗?

phpunit中是否有PHP方法在所有测试之前仅一次启动?(因为在每个测试之前执行setupbeforeclass)

我测试课程中的设置方法的一个典范。

class SearchRegisterControllerTest extends WebTestCase
{
    /** @var Client $client */
    private $client;
    protected static $application;
    public static function setUpBeforeClass()
    {
        $kernel = static::createKernel();
        $kernel->boot();
        $em = $kernel->getContainer()->get('doctrine.orm.entity_manager');
        $schemaTool = new SchemaTool($em);
        $metadata = $em->getMetadataFactory()->getAllMetadata();
        $schemaTool->dropSchema($metadata);
        $schemaTool->createSchema($metadata);
        /** @var Client $client */
        $client = static::createClient();
        $em = $client->getContainer()->get('doctrine.orm.entity_manager');
        $loader = new Loader();
        $loader->loadFromDirectory('src/MyNameSpace/AppBundle/DataFixtures/ORM');
        $purger = new ORMPurger();
        $executor = new ORMExecutor($em, $purger);
        $executor->execute($loader->getFixtures(), true);
    }

预先感谢。

您可以实现测试侦听器。

tests/starttestsuitelistener.php

namespace AppTests;

class StartTestSuite extends PHPUnit_Framework_BaseTestListener
{
    public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
    {
      // do initial stuff
    }
}

然后启用phpunit.xml配置中的测试侦听器:

phpunit.xml

<phpunit
 ...
>
    <listeners>
        <listener class="AppTestsStartTestSuiteListener">
        </listener>
    </listeners>
[...]
</phpunit>

以相同的方式您可以实现endbestsuite(检查文档中列出的所有事件)

希望此帮助

您可以在所有测试之前使用这样的bash脚本加载一次。

php bin/console doctrine:database:create --env=test --if-not-exists
php bin/console doctrine:schema:update --force --env=test --complete
php bin/console doctrine:fixtures:load --fixtures=tests/fixtures/api --env=test --no-interaction
php vendor/bin/phpunit tests/Functional

请记住,您的测试将不会在孤立的环境中使用新的数据执行,因此将彼此干扰。

相关内容

  • 没有找到相关文章

最新更新