如何测试 Symfony 独立包

问题描述 投票:0回答:2

我开发了一些捆绑包,即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?

php symfony phpunit
2个回答
3
投票

最好在每个项目的基础上安装 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
选项指定它


0
投票

目前,还没有关于如何对独立 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

© www.soinside.com 2019 - 2024. All rights reserved.