PHPUnit报告PHPUnit_框架_异常

PHPUnit报告PHPUnit_框架_异常,phpunit,symfony,Phpunit,Symfony,我向bundle添加了一个简单的测试 按照手册中的建议,我尝试让PHPUnit加载以下配置: phpunit -c /app phpunit.xml如下所示: <?xml version="1.0" encoding="UTF-8"?> <!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html --> <phpunit backupGlobals

我向bundle添加了一个简单的测试

按照手册中的建议,我尝试让PHPUnit加载以下配置:

phpunit -c /app
phpunit.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit
    backupGlobals               = "false"
    backupStaticAttributes      = "false"
    colors                      = "true"
    convertErrorsToExceptions   = "true"
    convertNoticesToExceptions  = "true"
    convertWarningsToExceptions = "true"
    processIsolation            = "false"
    stopOnFailure               = "false"
    syntaxCheck                 = "false"
    bootstrap                   = "bootstrap.php.cache" >

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>
</phpunit> 

显然,PHPUnit加载该文件并尝试查找以测试套件名称命名的PHP文件。我找不到任何关于它为什么这样做或这样一个文件应该是什么样子的信息。

似乎PHPUnit试图找到一个以testsuite标记的name属性命名的文件

  • 如果它找不到任何测试(错误的命名或错误的目录),或

  • 如果测试脚本中发生了致命错误;它发生得如此之早,以至于PHPUnit无法将该文件的内容识别为测试,因为在此之前无法加载任何类


  • 今天我在测试我的控制器时遇到了同样的问题。因为PHPUnit找不到测试类,所以仅仅按照书中的命令是不起作用的。我设法找到了一个解决方法,只需指定要测试的测试文件,它就可以工作了

    phpunit -c app src/Acme/DemoBundle/Tests/Utility/CalculatorTest.php
    

    我也有同样的错误,我只是升级了我的phpunit版本就解决了,我有3.6.10,现在我有4.0.17,它工作得很好,正如预期的那样。
    Synfony书并非完全错误,它只是将错误的phpunit版本声明为所需版本。

    碰巧我的包中有一个额外的目录级别。而不是
    MyVendorName\MyBundleNameBundle
    I拥有
    MyVendorName\MyProject\MyBundleNameBundle

    testsuites
    一节中
    phpunit.xml.dist
    中的默认目录是:

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*/*Bundle/Tests</directory>
            <directory>../src/*/Bundle/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>
    
    我加了这一行

    <directory>../src/*/*/*Bundle/Tests</directory>
    
    我换成这样:

    <exclude>
        <directory>../src/*/*Bundle/Resources</directory>
        <directory>../src/*/*/*Bundle/Resources</directory>
        <directory>../src/*/*Bundle/Tests</directory>
        <directory>../src/*/*/*Bundle/Tests</directory>
        <directory>../src/*/Bundle/*Bundle/Resources</directory>
        <directory>../src/*/Bundle/*Bundle/Tests</directory>
    </exclude>
    
    
    ../src/*/*捆绑包/资源
    ../src/*/*/*捆绑包/资源
    ../src/*/*捆绑/测试
    ../src/*/*/*捆绑/测试
    ../src/*/Bundle/*Bundle/Resources
    ../src/*/Bundle/*Bundle/Tests
    

    我希望现在它是正确的;)

    基本上就是这样,同意首先需要进入项目目录。那么只有命令才能起作用。。
    <directory>../src/*/*/*Bundle/Tests</directory>
    
    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*/*Bundle/Tests</directory>
            <directory>../src/*/*/*Bundle/Tests</directory>
            <directory>../src/*/Bundle/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>
    
    <exclude>
        <directory>../src/*/*Bundle/Resources</directory>
        <directory>../src/*/*Bundle/Tests</directory>
        <directory>../src/*/Bundle/*Bundle/Resources</directory>
        <directory>../src/*/Bundle/*Bundle/Tests</directory>
    </exclude>
    
    <exclude>
        <directory>../src/*/*Bundle/Resources</directory>
        <directory>../src/*/*/*Bundle/Resources</directory>
        <directory>../src/*/*Bundle/Tests</directory>
        <directory>../src/*/*/*Bundle/Tests</directory>
        <directory>../src/*/Bundle/*Bundle/Resources</directory>
        <directory>../src/*/Bundle/*Bundle/Tests</directory>
    </exclude>