php - 在安装了 Twig 的 PHPUnit 中进行单元测试

标签 php phpunit twig

当我运行 PHPUnit 时,它会尝试在意想不到的位置(即 Twig 安装目录)运行测试文件,并多次尝试加载 Twig 类文件。有谁知道如何解决这些问题?

背景

我正在使用 Twig (只是 Twig,不是 Symfony)在网络应用程序中,通过 Composer 安装 Twig。 Composer 和 Twig 安装在自定义位置,我的测试在 /test/ 中,所以我有以下简化的项目结构:

/src/includes/vendor/
    autoload.php
    composer/
    twig/
        twig/
            lib/
            test/
/test/
    bootstrap.php
    (various files named, e.g., someClassTest.php)

我的 Bootstrap 文件 (/test/bootstrap.php) 除了加载 Composer 自动加载器外什么都不做:

<?php
require_once dirname(__FILE__) . "/../src/includes/vendor/autoload.php";

我的 PHPUnit 配置文件 (phpunit.xml) 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
    <testsuites>
        <testsuite name="All Tests">
            <directory>./test/phpunit/</directory>
        </testsuite>
    </testsuites>
    <php>
        <ini name="xdebug.default_enable" value="0" />
        <ini name="xdebug.remote_autostart" value="0" />
        <ini name="xdebug.remote_enable" value="0" />
        <ini name="xdebug.overload_var_dump" value="0" />
        <ini name="xdebug.show_mem_delta" value="0" />
    </php>
</phpunit>

问题

<强>1。 PHPUnit 正在 /src/includes/vendor/composer/twig/twig/test/ 中运行 Twig 单元测试。

为什么?根据我的配置文件,我希望只运行 /test 中的测试。现在,我已经创建了一个单独的配置文件,该文件明确排除了带有此条目的 Twig 测试:

<exclude>./src/includes/vendor/</exclude>

这感觉很棘手和脆弱,我不明白为什么有必要。谁能解释一下?

<强>2。如果我尝试在未明确排除 Twig 单元测试的情况下运行 PHPUnit,我会遇到自动加载器问题。

如果我在不包含我的 bootstrap.php 文件的情况下运行 PHPUnit,则不会加载 Composer 自动加载器,因此 PHPUnit 会在它第一次尝试实例化任何 Twig 类时终止。

如果我包含自动加载器,类会加载两次,我会收到此错误:

Fatal error: Cannot redeclare class Twig_Node_Expression_Test in [path to project]\src\includes\vendor\twig\twig\lib\Twig\Node\Expression\Test.php on line 32

Call Stack:
    0.1630     223296   1. {main}() C:\Users\Ed\AppData\Local\Temp\ide-phpunit.php:0
    0.4280     857528   2. IDE_Base_PHPUnit_TextUI_Command::main() C:\Users\Ed\AppData\Local\Temp\ide-phpunit.php:552
    0.4280     864000   3. PHPUnit_TextUI_Command->run() C:\Users\Ed\AppData\Local\Temp\ide-phpunit.php:294
    1.8451    1338552   4. PHPUnit_Runner_BaseTestRunner->getTest() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/TextUI/Command.php:150
  107.4751    1501304   5. PHPUnit_Framework_TestSuite->addTestFiles() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Runner/BaseTestRunner.php:96
  107.6552    1668912   6. PHPUnit_Framework_TestSuite->addTestFile() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Framework/TestSuite.php:416
  107.6572    1668888   7. PHPUnit_Util_Fileloader::checkAndLoad() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Framework/TestSuite.php:355
  107.6592    1669056   8. PHPUnit_Util_Fileloader::load() phar://C:/Users/Ed/Documents/Programming/phpunit-lts.phar/phpunit/Util/Fileloader.php:76

我在实际运行应用程序时没有遇到任何类似的问题;这仅在单元测试时发生。

如果有帮助,我正在运行 PHPStorm 9 (PS-141.1717),使用 PHPUnit 3.7.37。

有没有人了解这个问题?


根据评论编辑:PHPStorm正在执行的命令行如下:

C:\xampp\php\php.exe C:/Users/Ed/AppData/Local/Temp/ide-phpunit.php --bootstrap [path to project]\test\phpunit\bootstrap.php --configuration [path to project]\phpunit.xml [path to project]

最佳答案

在 PHPUnit 命令的末尾,尝试将 [path to project] 替换为 [path to project]/tests/phpunit,或者完全省略该部分。

关于php - 在安装了 Twig 的 PHPUnit 中进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223619/

相关文章:

php - nginx - 目录中的友好 URL

内爆计数大于 2 的数组时出现 PHP INSERT 错误

zend-framework - 如何在 Zend PHPUnit Controller 测试中调度带有子域的 url?

php - 如何在vue中使用twig

Php Composer openssl错误

php - Eclipse PHP PHPUnit - Eclipse 使用错误的 php.ini 文件

unit-testing - 为什么要避免使用DbUnit测试MySQL?

javascript - 提交表单时捕获onClick事件

forms - 在 symfony 2 中自定义日期表单

php - 我们应该在哪里更改以在不使用 Sugarcrm 中的 ui 的情况下从菜单中显示或隐藏模块