【问题标题】:How to test Symfony standalone bundle如何测试 Symfony 独立包
【发布时间】:2018-07-22 15:46:00
【问题描述】:

我已经开发了一些包,即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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答!事实上,所有依赖项都必须安装在包的vendor 文件夹中,就像完整的 symfony 应用程序一样。因为它是一个独立的捆绑包,我认为它是不需要的。对吗?
    • 如果您的捆绑包使用它们,则需要它们 :) 弄清楚可能有点棘手。由于这是一个包,因此将框架包作为依赖项是可以的,但您也可以只使用您真正需要的东西,例如配置、DI 等。
    • 谢谢!有用!现在找到了课程,但我面临一个新问题。当我使用类型提示在类中注入服务时,它在使用捆绑包时有效,但不适用于测试。正如您似乎对测试有所了解,您能引导我找到有关此的帮助链接吗?否则我会浏览网页。
    • Symfony DI 正在注入服务,而您这里没有。但是,您不应该创建这些部门的实例。这是一个较长的主题,请阅读 phpunit mocking。这不是太难,但可能需要一些时间来适应它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2023-02-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多