未找到symfony 2.1 phpunit Swift_消息类

未找到symfony 2.1 phpunit Swift_消息类,symfony,phpunit,swiftmailer,classnotfound,Symfony,Phpunit,Swiftmailer,Classnotfound,我和symfony和phpunit有问题。我们的项目越来越大。因此,我们决定为phpunit激活进程隔离,因为服务器无法再经受大量的测试(RAM不足)。从那时起,所有发送邮件的测试都不再工作了。有人能帮我们吗?如果processIsolation=“false”,下面的测试工作得非常好,但是如果processIsolation=“true”,则测试失败 版本: symfony 2.1.8-dev phpunit 3.7.9 错误消息 Project\AppBundle\Tests\MailT

我和symfony和phpunit有问题。我们的项目越来越大。因此,我们决定为phpunit激活进程隔离,因为服务器无法再经受大量的测试(RAM不足)。从那时起,所有发送邮件的测试都不再工作了。有人能帮我们吗?如果processIsolation=“false”,下面的测试工作得非常好,但是如果processIsolation=“true”,则测试失败

版本:

  • symfony 2.1.8-dev

  • phpunit 3.7.9

错误消息

Project\AppBundle\Tests\MailTest::testSendMail PHPUnit_Framework_异常:PHP致命错误:在/var/www/project/src/project/AppBundle/Tests/MailTest.PHP中找不到类“Swift_Message”

测试

public function testSendMail()
{
    $client = static::createClient();

    $message = \Swift_Message::newInstance();
    $message->setFrom('example@example.com')
        ->setTo('example@example.com')
        ->setSubject('Subject')
        ->setBody('Hello World')
        ->setContentType('text/html');

    $client->getContainer()->get('mailer')->send($message);
    $this->assertTrue(true);
}
phpunit.xml

<phpunit
    backupGlobals="false"
    backupStaticAttributes="false"
    colors="true"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    bootstrap="./autoload.php"
    processIsolation="true"
    stopOnFailure="false"
    syntaxCheck="false" >

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/Project/AppBundle/Tests/MailTest.php</directory>
        </testsuite>
</testsuites>
</phpunit>

../src/Project/AppBundle/Tests/MailTest.php

如果您首先实例化$message,然后调用static::createClient,它会工作吗?

此错误是因为SwitMail定义了一个常量而导致的 SWIFT安装自动加载器后需要加载。这个 autoloader检查此常量,如果已定义,则拒绝 安装自动加载器。在流程隔离中,PHPUnit确保 所有定义的常量都在生成的进程中重新定义 运行测试。不幸的是,这意味着SWIFT\u需要加载 是在测试过程中定义的,因此自动加载器不会加载(请参阅 swiftmailer源目录中的“swift_required.php”)。注意 如果禁用“通过注释包含测试的全局状态” 测试仍然无法工作,因为引导文件已传递给 通过u_PHPUNIT_引导全局变量的测试过程(请参阅 PHPUnit目录中的TestCaseMethod.tpl)。如果没有环球, 该全局变量在测试过程中未定义,引导文件为 不包括破坏测试

我发现唯一可行的办法就是更换线路
$constants=PHPUnit_Util_GlobalState::getConstantSassString()
具有
$constants=''
在PHPUnit源代码发行版的TestCase.php的run方法中。如果你的代码
依赖于在运行测试用例之前定义的全局常量
此修复显然不适用于您(类常量是
不同的故事);除非所述常数将在

运行测试用例的过程。

这是由与swiftmailer自动加载器相关的问题引起的

我遇到了同样的问题,并在swiftmailer的分叉存储库中修复了它

您可以在此处找到修复程序的PR:

如果您不希望等待合并,您可以通过将其添加到您的
composer.json
来使用my repository

"require": {
    "swiftmailer/swiftmailer": "dev-master as 5.0.x-dev"
},
"repositories": [
    {
        "type": "vcs",
        "url":  "https://github.com/NickStemerdink/swiftmailer.git"
    }
]


更新:同时PR已经合并,因此您可以只更新到最新的swiftmailer版本。

如何运行测试?确保使用“-c”选项告诉phpunit phpunit.xml配置文件的位置。因此,如果它在“app”目录中,它应该是这样的:“phpunit-c app src/Project/AppBundle/Tests/MailTest.php”是的,这正是我让我们运行它的命令。但仍然不起作用。请使用bootstrap=“bootstrap.php.cache”尝试更改:bootstrap=“./autoload.php”