我最近跑过PHPUnit Bridge,并且一直在我的任何独立Symfony应用中使用它。但是,我注意到我们维护的可重用捆绑依赖项的一些弃用通知。
为了诊断,我打开了可重用的bundle项目并安装了symfony/phpunit-bridge
,但在运行phpunit
之后注意到没有弃用通知等,正在为项目输出。
那么如何利用可重用捆绑包的symfony/phpunit-bridge
包?
答案 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环境中执行测试。