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-&gt;expectException()。除此之外,大多数旧测试仍应运行得相当干净。 我没有使用 PHPUnit 的经验,所以我会确保查找 >8 的文档。我的下一个挑战是为我的定制类实现一个 psr-4 类路径...

以上是关于Composer 自动加载器在运行测试时找不到 PHPUnit的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit:使用@runTestsInSeparateProcesses 时找不到嘲弄

java运行时找不到主类

Composer 自动加载器找不到类

当我让 composer install --optimize-autoloader --no-dev 时找不到类 'BeyondCode\DumpServer\DumpServerServicePr

运行 JUnit 测试时找不到类异常

PhpStorm 2016.3.3 找不到 PHPUnit 6.0 的测试类。*