Composer 自动加载器在运行测试时找不到 PHPUnit
Posted
技术标签:
【中文标题】Composer 自动加载器在运行测试时找不到 PHPUnit【英文标题】:Composer autoloader can't find PHPUnit when running tests 【发布时间】:2019-07-09 23:50:42 【问题描述】:我正在更新一个旧的 php 项目以使用 composer,并实现 PHPUnit。不幸的是,我遇到了一些问题。运行 PHPUnit 时
致命错误:找不到类“PHPUnit_Framework_TestCase”
composer.json
"require":
"phpunit/phpunit": "^8.0",
"phpoffice/phpspreadsheet": "^1.6"
,
"autoload":
"psr-4": "Biz\\": "src/php/Classes"
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
bootstrap="vendor/autoload.php"
verbose="true">
<testsuites>
<testsuite name="Random Tests">
<directory>./src/test/random/*Test.php files</directory>
</testsuite>
</testsuites>
</phpunit>
目录结构
正在执行的命令行
$ ./vendor/bin/phpunit ./src/test/random/SampleTest.php
我正在使用 git-bash 运行它。从 Visual Studio 代码执行会得到相同的结果。我已阅读并按照Autoloading classes in PHPUnit using Composer and autoload.php
中的描述实现了该问题测试用例
<?php
class SampleTest extends \PHPUnit_Framework_TestCase
public function testUserClassInheritance()
global $mysqlConn;
echo "testing";
$this->assertTrue(true);
$user = new Bruger;
【问题讨论】:
尝试扩展 \PHPUnit\Framework\TestCase 而不是 PHPUnit_Framework_TestCase。另外,请展示您的测试类代码,这样我们就可以看到您是如何定义测试类的,包括任何命名空间信息,而无需我们做出假设。 【参考方案1】:PHPUnit_Framework_TestCase
在 PHPUnit 版本 8 中不存在,这是您指定的最低版本。从(我认为)PHPUnit 版本 5 开始,它使用命名空间,因此您的测试用例应命名为 \PHPUnit\Framework\TestCase
。
您可以将您的 PHPUnit 要求降级为旧版本,或者(最好)更新您的测试以满足新的命名风格。
【讨论】:
我关注的是youtube.com/watch?v=cQucsmbOkpE,它显然使用了较旧的 PHPUnit 版本。\PHPUnit\Framework\TestCase
工作!
请注意(可能)您必须处理的下一个最大变化是 @expectedException
被替换为 $this->expectException()
。除此之外,大多数旧测试仍应运行得相当干净。
我没有使用 PHPUnit 的经验,所以我会确保查找 >8 的文档。我的下一个挑战是为我的定制类实现一个 psr-4 类路径...以上是关于Composer 自动加载器在运行测试时找不到 PHPUnit的主要内容,如果未能解决你的问题,请参考以下文章
PHPUnit:使用@runTestsInSeparateProcesses 时找不到嘲弄
当我让 composer install --optimize-autoloader --no-dev 时找不到类 'BeyondCode\DumpServer\DumpServerServicePr