我正在玩PHP 7和phpUnit 6。这是我写的测试:
<?php declare(strict_types=1);
namespace Test;
use DesignPatterns\Observer\User;
use DesignPatterns\Observer\UserObserver;
use PHPUnit\Framework\TestCase;
class ObserverTest extends TestCase
{
public function testChangeInUserLeadsToUserObserverBeingNotified()
{
$observer = new UserObserver();
$user = new User();
$user->attach($observer);
$user->changeEmail('foo@bar.com');
$this->assertCount(1, $observer->getChangedUsers());
}
}
当我尝试运行此测试时,收到以下错误消息:
PHP Fatal error: Class 'PHPUnit\Framework\TestCase' not found in /home/.../.../Test/ObserverTest.php on line 9
我用composer安装了PHPUnit,这是我的composer。json文件内容:
{
"require": {
"phpunit/phpunit": "^6.0"
},
"autoload": {
"psr-4": {"DesignPatterns\\": "src/"}
}
}
根据phpunit6文档,您的测试现在应该扩展PHPUnit\Framework\TestCase而不是PHPUnit\u Framework\u TestCase。
我知道这不是自动加载的问题。实际上,如果我用PHPUnit\u Framework\u TestCase替换PHPUnit\Framework\TestCase,它就可以正常工作,但我想知道为什么这个语法不起作用。
我试着在google、stackoverflow和PHPUnit的github存储库上做了一些研究,但什么都没找到。
我期待着你的回答,
编辑
以下是我的文件的组织方式:
src/
├── DataMapper
│ ├── StorageAdapter.php
│ ├── UserMapper.php
│ └── User.php
├── Observer
│ ├── UserObserver.php
│ └── User.php
Test/
├── DataMapperTest.php
└── ObserverTest.php
在我的例子中,我在 /Applications/MAMP/Library/bin目录中的路径中有不同版本的phpUnit。在创建到全局安装版本(7.5.1)而不是5.1.3的符号链接后,这修复了我的错误:
cd /Applications/MAMP/Library/bin
mv phpunit phpunit_bak
ln -s /usr/local/bin/phpunit phpunit
我发布这个以防有人在升级到Symfony 4.4/5.0后出现这个错误。
在较新版本的Symfony中,您有一个在phpunit中定义的版本。xml。dist
。运行时将下载此版本/bin/phpunit
及其来源将置于下/bin/。phpunit/phpunit版本
。如果您正在执行php/bin/console--env=test debug:container
您可能会得到OP异常所提到的。修复很简单-您需要在编写器中添加类的路径。json
:
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
},
"classmap": [
"tests/",
"bin/.phpunit/phpunit-9.2.0-0/src" <--- Make sure the version is correct.
]
},
然后运行composer dump autoload
,最后运行php/bin/console--env=testdebug:container
应该可以工作。
我找到了答案:
我正在使用以下命令行执行测试:
phpunit Test/ObserverTest.php
PHPUnit是全球安装在我的电脑上,但它是5.1.3版本:
phpunit -v
PHPUnit 5.1.3 by Sebastian Bergmann and contributors.
Runtime: PHP 7.0.13-0ubuntu0.16.04.1 with Xdebug 2.4.0
Configuration: /home/.../.../DesignPatterns/phpunit.xml
语法PHPUnit\Framework\TestCase只适用于PHPUnit 6
现在,如果我运行php供应商/bin/phpUnit测试/ObserverTest.php
,它完美地工作...
我有一个类似的问题,在这里描述: 一切都按照我的预期工作;我的代码访问数据库并打印输出,不管我是从命令行界面还是从网络浏览器运行。同样的结果。如果我用PHPUnit在Eclipse中运行它,我会得到一个错误: 哪些点位于下一行: 此代码打印出“是”。 还有一点需要指出的是,我在上面代码所在的类中使用自己的名称空间。我的单元测试在全局命名空间中。 我已经按照上面的URL中的步骤,但是,唉,没有用。:
问题内容: 我已经从php.net粘贴了在php中使用memcached 的示例,并且得到了: 我的php.ini中有这个: [memcache] memcache.hash_strategy =“一致” memcache.max_failover_attemps = 100 memcache.allow_failover = 1 这是分别来自php -i和php -m的信息: php -i |
我需要在我的PHP脚本中使用Mongodb。 所以我已经将php_mongodb.dll从php_mongodb-1.2.5-5.6-ts-vc11-x64.zip安装到"C:\wamp64\bin\php\php5.6.25\ext\"。我在php.ini.加了extension.dll 当我运行php时。exe,没有任何错误,任何警告。。。但是Mongodb没有出现在php扩展列表中(phpi
我尝试一个简单的Web服务示例,我得到这个错误,即使我取消注释在文件: 致命错误:在C:\Program Files(x86)\EasyPHP-5.3.9\第2行的www\server.php中找不到类'SoapClient'
问题内容: 我有一个问题,我在Linux服务器上安装了“ Archive_Zip 0.1.1”,但是当我尝试运行脚本来创建zip文件时,却出现了致命错误 致命错误:在…中找不到类 我把代码放在哪里 但找不到类文件。 请告诉我解决方案。我该怎么办才能解决问题?我也将文件放到脚本所在的文件夹中,但是不起作用。 问题答案: 对于要显示的类,PHP需要安装zip扩展名。 有关安装说明,请参见此页面(Lin
我是PHPUnit和单元测试的新手,所以我通过作曲家安装了PHPUnit和phar,一切都很好,直到我尝试开始我的简单测试。我使用PhpStorm,我可以看到所有的类都是自动加载的,但是当我试图开始我的测试时,我得到了一个错误: 我不明白他为什么要在高于PHPUnit的文件夹中查找它? 我试图在composer中配置自动加载部分。json和检查phpunit中的设置。xml,但什么都不起作用。 加