【问题标题】:Updated composer.json, now PHP autoload does not work. PHPUnit cannot find my classes更新了 composer.json,现在 PHP 自动加载不起作用。 PHPUnit 找不到我的课程
【发布时间】:2018-07-02 19:24:53
【问题描述】:

我是EWZSearchBundle 的用户并希望更新它以使用 Symfony 3.x

更新composer.json 文件应该很容易,但我无法让单元测试运行。

这是我的捆绑包的链接,其中包含一些“改进”:link to commit

当我运行 phpunit 测试时,我收到以下错误:

$ vendor/bin/phpunit Tests/Lucene/FieldTest.php
PHPUnit 5.7.26 by Sebastian Bergmann and contributors.

PHP Fatal error:  Call to undefined method Zend\Search\Lucene\Document\Field::getType() in /tmp/azine/EWZSearchBundle/Tests/Lucene/FieldTest.php on line 18
PHP Stack trace:
PHP   1. {main}() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/phpunit:52
PHP   3. PHPUnit_TextUI_Command->run() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/TextUI/Command.php:116
PHP   4. PHPUnit_TextUI_TestRunner->doRun() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/TextUI/Command.php:186
PHP   5. PHPUnit_Framework_TestSuite->run() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:517
PHP   6. PHPUnit_Framework_TestCase->run() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/Framework/TestSuite.php:733
PHP   7. PHPUnit_Framework_TestResult->run() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/Framework/TestCase.php:868
PHP   8. PHPUnit_Framework_TestCase->runBare() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/Framework/TestResult.php:686
PHP   9. PHPUnit_Framework_TestCase->runTest() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/Framework/TestCase.php:913
PHP  10. ReflectionMethod->invokeArgs() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/Framework/TestCase.php:1062
PHP  11. EWZ\Bundle\SearchBundle\Tests\Lucene\FieldTest->testGetType() /tmp/azine/EWZSearchBundle/vendor/phpunit/phpunit/src/Framework/TestCase.php:1062

重现步骤:

$ git clone  git@github.com:azine/EWZSearchBundle.git
$ cd EWZSearchBundle
$ composer install
$ vendor/bin/phpunit Tests/Lucene/FieldTest.php

此错误的原因是,EWZ\Bundle\SearchBundle\Lucene\Field 类未(正确)自动加载,但 vendor 目录中的 Zend\Search\Lucene\Document\Field 已自动加载但没有该方法。

谁能告诉我为什么从根目录自动加载命名空间EWZ\Bundle\SearchBundle 中的类不起作用?

非常感谢所有帮助。

【问题讨论】:

标签: php symfony phpunit composer-php


【解决方案1】:

该类已正确自动加载。问题出在代码本身。

当您通过代码启动 $binaryField

$binaryField = Field::Binary('Binary', 'value');

结果属于\Zend\Search\Lucene\Document\Field 类,而不是\EWZ\Bundle\SearchBundle\Lucene\Field

因为它执行 return new self($name, $value, '', true, false, false, true); \Zend\Search\Lucene\Document\Field 内,这运行\Zend\Search\Lucene\Document\Field 的构造函数,而不是您的扩展类。

【讨论】:

  • 非常感谢您发现错误!我能够通过在\EWZ\Bundle\SearchBundle\Lucene\Field 上实现静态方法来解决问题。
猜你喜欢
  • 2021-04-20
  • 2015-07-27
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多