【问题标题】:PHPUnit undefined method callPHPUnit 未定义的方法调用
【发布时间】:2018-07-12 04:49:48
【问题描述】:

当我尝试在项目中运行我的 global PHPUnit 时遇到了一个令人费解的错误。

我的系统范围的 PHPUnit 是 7.2.6,而我的 PHP 版本是 7.2.7。

这是我得到的错误:

PHPUnit 7.2.6 by Sebastian Bergmann and contributors.
PHP Fatal error:  Uncaught Error: Call to undefined method PHPUnit\Util\Configuration::hasValidationErrors() in /Users/ronald/Sites/painting/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:337
Stack trace:
#0 /Users/ronald/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php(198): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
#1 /Users/ronald/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php(151): PHPUnit\TextUI\Command->run(Array, true)
#2 /Users/ronald/.composer/vendor/phpunit/phpunit/phpunit(53): PHPUnit\TextUI\Command::main()
#3 {main}
  thrown in /Users/ronald/Sites/painting/vendor/phpunit/phpunit/src/TextUI/TestRunner.php on line 337

Fatal error: Uncaught Error: Call to undefined method PHPUnit\Util\Configuration::hasValidationErrors() in /Users/ronald/Sites/painting/vendor/phpunit/phpunit/src/TextUI/TestRunner.php on line 337

Error: Call to undefined method PHPUnit\Util\Configuration::hasValidationErrors() in /Users/ronald/Sites/painting/vendor/phpunit/phpunit/src/TextUI/TestRunner.php on line 337

Call Stack:
    0.0026     395856   1. {main}() /Users/ronald/.composer/vendor/phpunit/phpunit/phpunit:0
    0.0512    1935008   2. PHPUnit\TextUI\Command::main() /Users/ronald/.composer/vendor/phpunit/phpunit/phpunit:53
    0.0512    1935120   3. PHPUnit\TextUI\Command->run() /Users/ronald/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:151
    0.0960    5578520   4. PHPUnit\TextUI\TestRunner->doRun() /Users/ronald/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:198

有趣的是,当我运行 vendor/bin/phpunit 而不是全局 PHPUnit 时它可以工作。我可以在我的任何项目中运行全局版本,而且效果很好,所以我不确定问题出在哪里。

最后,这是我的 phpunit.xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>

        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="MAIL_DRIVER" value="array"/>
        <env name="DB_CONNECTION" value="sqlite_testing" />
    </php>
</phpunit>

【问题讨论】:

  • 看起来像一个自动加载问题。不知何故,您的设置混合了本地和全局安装的 phpunit。堆栈跟踪中有/Users/ronald/.composer/vendor/phpunit/(全局),但错误发生在/Users/ronald/Sites/painting/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(本地)

标签: php phpunit


【解决方案1】:

永远不要将全局 PHPUnit 安装与项目本地、Composer 安装的 PHPUnit 混合。

【讨论】:

  • 哇,谢谢你直接回答我的问题。我非常感谢您的建议!
猜你喜欢
  • 2014-11-07
  • 1970-01-01
  • 2016-04-21
  • 2017-06-11
  • 2020-09-03
  • 2011-01-03
  • 2018-01-11
  • 2018-03-22
相关资源
最近更新 更多