Class 在名称空间中找不到

Class not found in nameSpace

我正在尝试 运行 使用 PHPUnit 进行单元测试。但是我得到了 class not found error。我已经尝试了很长时间,但仍然找不到问题所在。

这是文件夹结构。

我在 <base>/stats/cls 文件夹中有 Class Calc<base>/stats/Tests 文件夹

中的测试文件

composer.json 文件

{
    "name": "app/test",
    "description": "I am learning PHPUnit",
    "authors": [
        {
            "name": "Fawzan",
            "email": "xxxxxx@xxx.xxx"
        }
    ],
    "minimum-stability": "dev",
    "require": {},
    "require-dev": {
        "phpunit/phpunit" : "*"
    }
}

Calc.php 文件

<?php

namespace stats\cls;

class Calc
{

    public function add($a, $b)
    {
        return $a + $b;
    }

}

CalcTest.php 文件

<?php     
namespace stats\Tests;

use stats\cls\Calc;

class CalcTest extends \PHPUnit_Framework_TestCase
{


    public function testAddEquals()
    {

        $x = 10;
        $y = 20;

        $baseball = new Calc();

        $result = $baseball->add($x, $y);

        $expectedResult = $x + $y;

        var_dump($result);

        $this->assertEquals($expectedResult, $result);

    }
}

phpunit.xml 文件

<?xml version="1.0" encoding="utf-8" ?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="Application Test Unit">
            <directory>./stats/Tests/</directory>
        </testsuite>
    </testsuites>
</phpunit>

当我 运行 phpunit 命令时,出现以下错误。

PHP Fatal error:  Class 'stats\cls\Calc' not found in /var/www/stats/Tests/CalcTest.php on line 26

有人可以帮我吗?

您的 composer.json 中没有自动加载您自己的代码,因此引导 vendor/autoload.php 只会加载依赖项 - 在这种情况下,只会加载 PHPUnit。

您仍然需要加载要测试的 class。最简单的方法是使用 Composer 定义自动加载:

作为快速解决方法,您仍然可以在测试顶部(命名空间行下方)使用 require_once() 来加载测试的 class,但这应该只是证明您的捷径代码有效。在长 运行.

中习惯于将自动加载定义添加到 composer.json 更容易