我开发了一些捆绑包,即https://github.com/975L/EmailBundle,我想为它们添加测试。因此,我创建了包含一个测试的文件
Tests/Service/EmailServiceTest.php
。
我已经在 Ubuntu 计算机上使用
sudo apt install phpunit
安装了 phpunit,但是当我 cd
到我的捆绑包文件夹并运行 phpunit
时,出现以下错误:
1) c975L\EmailBundle\Tests\Service\EmailServiceTest::testCreateEmailObject 错误:找不到类“c975L\EmailBundle\Service\EmailService”
看起来自动加载无法找到该类,即使在顶部使用
use
进行了声明。
我在网上看到了一些解决方案,需要创建一个具有自动加载功能的
bootstrap.php
,但即使这样,它也不起作用......
所以我的问题是我们如何使用 phpunit 测试独立的 Symfony Bundle?
最好在每个项目的基础上安装 phpunit,因为如果您有多个项目,可能会出现版本差异。
(1)
composer require phpunit/phpunit --dev
我在网上看到了一些解决方案,需要创建一个具有自动加载功能的 bootstrap.php,但即使这样,它也不起作用......
您可以使用 Composer 的自动加载器作为引导程序。自定义引导程序在某些情况下可能会派上用场,但不是必需的。
(2) 创建一个
phpunit.xml.dist
文件,如下所示(您当前的文件未指定引导程序):
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="./vendor/autoload.php">
<testsuites>
<testsuite name="MyBundle test suite">
<directory suffix="Test.php">./Tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>./</directory>
<exclude>
<directory>./Resources</directory>
<directory>./Tests</directory>
<directory>./vendor</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
还可以看看
vendor/bin/phpunit --generate-configuration
,这很好。
(3) 运行
vendor/bin/phpunit
它应该自动找到配置文件,但您也可以使用
--configuration
选项指定它
目前,还没有关于如何对独立 Symfony 包进行功能测试的全面且清晰的文档。
要深入了解这一点,您可以检查一些 Symfony 包以了解他们的方法:
https://github.com/lexik/LexikJWTAuthenticationBundle/tree/3.x/Tests
以我的愚见,这是相对复杂和混乱的。
最近,Symfony 发布了有关如何编写捆绑包的新约定。例如,当前建议建议将代码放置在“src/”目录中。然而,所有核心 Symfony 包(如“security bindle”)的根目录中仍然有代码,这使得一切变得更加混乱。
我写了一篇文章,提出了如何用干净的方式做到这一点:
https://medium.com/@fico7489/symfony-function-tests-for-standalone-bundles-9666045a2309