当前位置: 首页 > 知识库问答 >
问题:

PHPUnit测试错误,找不到类

姚淳
2023-03-14

我是PHPUnit和单元测试的新手,所以我通过作曲家安装了PHPUnit和phar,一切都很好,直到我尝试开始我的简单测试。我使用PhpStorm,我可以看到所有的类都是自动加载的,但是当我试图开始我的测试时,我得到了一个错误:

Fatal error: Class 'PharIo\Manifest\Simple' not found in C:\xampp\htdocs\mydocs\

我不明白他为什么要在高于PHPUnit的文件夹中查找它?

我试图在composer中配置自动加载部分。json和检查phpunit中的设置。xml,但什么都不起作用。

加:

我必须在没有PharIO的情况下重新安装PHPUnit,所以现在我有了一点进展,现在我有了一个情况,如果我使用测试类的名称创建require_once行,我可以测试我的类。它看起来像:

require_once '../src/Simple.php';

class SimpleTest extends PHPUnit_Framework_TestCase
{

    public function testAdd() {

        $sum = new Simple();

        $this->assertEquals(5, $sum->add(2, 3));

    }

}

所以我的简单类是:

class Simple {

public function add($a, $b) {

    return (int) $a + (int) $b;

}

}

但是,当然,我想使用名称空间。我试图根据这个问题做一些改变:使用作曲家和autoload.php在PHPUnit中自动加载类(我甚至尝试使用该回购进行测试,但仍然存在错误),但没有什么对我有效。我试图在composer.json中编辑我的自动加载部分

"autoload": {
    "psr-4": {
        "app\\": "src/"
    }

},

但错误仍然存在,换言之自动加载无法看到它。我是普尼特。xml和phpunit。具有相同设置的dist.xml

<phpunit
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/3.7/phpunit.xsd"
        backupGlobals="true"
        backupStaticAttributes="false"
        colors="true"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        processIsolation="false"
        stopOnFailure="false"
        syntaxCheck="false"
        bootstrap="./tests/bootstrap.php">

        <testsuites>
                <testsuite name="The project's test suite">
                        <directory>./tests</directory>
                </testsuite>
        </testsuites>
</phpunit>

我做了测试/引导。php也与

require_once '../vendor/autoload.php';

共有3个答案

周正真
2023-03-14

Composer的自动加载依赖于供应商/自动加载中的配置。php文件,需要在执行线程中的某个点加载该文件。您的应用程序已经包含了这个,这就是它工作的原因,但是测试使用不同的入口点,所以您需要使用名为phpunit的文件对其进行配置。xml。dist

假设您的文件结构类似于:

app/
src/
tests/
  bootstrap.php <- create it in your test folder
vendor/
...
composer.json
composer.lock
phpunit.xml.dist <- create it if does not exist

您可以在这里看到各种选项,但对于基本配置,您可以使用此选项。

文件phpunit.xml.dist

<phpunit
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/3.7/phpunit.xsd"
    backupGlobals="true"
    backupStaticAttributes="false"
    bootstrap="tests/bootstrap.php">
</phpunit>

文件测试/bootstrap.php

require_once '../vendor/autoload.php';

您应该从根目录运行phpunit

巫马磊
2023-03-14

您可以按照另一个答案中的建议,通过在XML文件中自动加载来指定文件,或者只需在运行测试的命令中指定--bootstrap选项:

phpunit——引导供应商/自动加载。php测试

司徒宏远
2023-03-14

我知道这是一个老问题,但也许你需要这样做

composer dump autoload,用于composer生成类的映射。

我浪费了30分钟试图理解为什么PHPUnit给了我:

不能存根或模拟类或接口XXX,因为它不存在

 类似资料:
  • 这是一个关于PHP单元测试的问题,给出了一个类NotFound错误。 背景资料 我正在使用Zend Studio 10.5开发Zend Framework 2应用程序。我加载了一些模块,包括和 FedcoUser是具有使用BJYAAuthorize的保护规则的控制器保护的模块: 使用Zend Studio 10.5本机菜单,我为上面的控制器创建了一个测试用例。当我运行它时,我得到以下错误: 我的假

  • 在试图用PHPUnit设置Eclipse作为单元测试库时,我陷入了试图运行一个简单测试用例的困境。作为参考,我按照本教程使用PHPUnit/Xdebug/Makegood来设置Eclipse,唯一偏离给出的指导方针是为PHPUnit/Makegood设置以下配置文件: 现在,问题的根源在于,我似乎无法使用Makegood从Eclipse运行PHPUnit测试。我编写的唯一测试(位于名为test.p

  • 我有一套硒测试。例如,有时“断言声明”会失败。在某些情况下,这可能是因为有人破坏了某些东西,而用户界面点击顺序的结果是一个错误,导致网站的错误页面被显示。 如何检查是否每一次失败都发生了这种情况,而不必在任何地方实现对以下方法的调用? 目的是简单地通过电子邮件发送显示页面的html源,如果该页面被证明是一个错误页面。

  • 我有一个类似的问题,在这里描述: 一切都按照我的预期工作;我的代码访问数据库并打印输出,不管我是从命令行界面还是从网络浏览器运行。同样的结果。如果我用PHPUnit在Eclipse中运行它,我会得到一个错误: 哪些点位于下一行: 此代码打印出“是”。 还有一点需要指出的是,我在上面代码所在的类中使用自己的名称空间。我的单元测试在全局命名空间中。 我已经按照上面的URL中的步骤,但是,唉,没有用。:

  • 我正在玩PHP 7和phpUnit 6。这是我写的测试: 当我尝试运行此测试时,收到以下错误消息: 我用composer安装了PHPUnit,这是我的composer。json文件内容: 根据phpunit6文档,您的测试现在应该扩展PHPUnit\Framework\TestCase而不是PHPUnit\u Framework\u TestCase。 我知道这不是自动加载的问题。实际上,如果我用

  • 我正在用开发一个API,我目前正在尝试用实现一些单元测试。当我通过命令行运行测试时,我一直遇到一个错误: 我的composer.json是这样的: 我的测试类是这样的: 如果我注释掉整个第二个测试,留下use语句,第一个测试将毫无问题地通过。我认为这可能与测试文件的位置有关,因此我将其移动到classes/app目录,在那里我有其他具有类似导入的类,并且我看到了相同的结果,因此我认为这与文件所在的