使用PHPUnit Bridge测试可重用的Symfony Bundle

时间:2015-10-15 19:53:00

标签: symfony phpunit bundle

我最近跑过PHPUnit Bridge,并且一直在我的任何独立Symfony应用中使用它。但是,我注意到我们维护的可重用捆绑依赖项的一些弃用通知。

为了诊断,我打开了可重用的bundle项目并安装了symfony/phpunit-bridge,但在运行phpunit之后注意到没有弃用通知等,正在为项目输出。

那么如何利用可重用捆绑包的symfony/phpunit-bridge包?

1 个答案:

答案 0 :(得分:2)

  

我注意到我们维护的可重用捆绑依赖项的一些弃用通知。

     

为了诊断,我打开了可重复使用的捆绑项目并安装了symfony/phpunit-bridge,但在运行phpunit之后注意到没有弃用通知等,正在为项目输出。

相同代码并不总是触发相同警告的事实可能表明测试不同。

如果这来自PHP代码,您可以使用PHP_CodeCoverage查看经过测试和未经测试的代码。当您使用PHPUnit时,您可以添加一个选项以生成代码覆盖率报告,例如phpunit … --coverage-html cov/将在cov/目录中生成HTML报告。通过比较输出,您可以看到从Symfony启动的测试是否调用与Bundle中启动的测试相同的代码。

如果测试不同,您可以set up a Symfony environment for your bundle

  

创建一个TestKernel

<?php
// Tests/Controller/App/AppKernel.php

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // Dependencies
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            [...]
            // My Bundle to test
            new Beberlei\WorkflowBundle\BeberleiWorkflowBundle(),
        );

        return $bundles;
    }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        // We don't need that Environment stuff, just one config
        $loader->load(__DIR__.'/config.yml');
    }
}
     

创建config.yml

# Tests/Controller/App/config.yml
framework:
    secret:          secret
    charset:         UTF-8
    test: ~
    router:          { resource: "%kernel.root_dir%/routing.yml" }
    form:            true
    csrf_protection: true
    validation:      { enable_annotations: true }
    templating:      { engines: ['twig'] }
    session:
        auto_start:     false
        storage_id: session.storage.filesystem

monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      nested
        nested:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug
     

创建routing.yml

# Tests/Controller/App/routing.yml
BeberleiWorkflowBundle:
    resource: "@BeberleiWorkflowBundle/Controller/"
    type:     annotation
    prefix:   /
     

修改phpunit.xml.dist

<!-- phpunit.xml.dist -->
<phpunit bootstrap="Tests/bootstrap.php">
    <php>
        <server name="KERNEL_DIR" value="Tests/Controller/App" />
    </php>
</phpunit>

然后,您可以在 composer.json 中的必需包中添加"symfony/symfony": "~2.3"并安装包。未来的测试将启动此AppKernel并在完整的Symfony环境中执行测试。