首页 > 解决方案 > 无法使用“use”关键字调用命名空间

问题描述

我正在学习 PHPUnit,但一开始,一些微不足道的事情让我绊倒了。

这是 src 文件夹中的 Receipt PHP 文件 -

namespace TDD;

class Receipt {
    public function total(array $items = []) {
        return array_sum($items);
    }
}

这就是测试文件夹中的 ReceiptTest.php 文件 -

namespace TDD\Test;
require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR  . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';

use PHPUnit\Framework\TestCase;
use TDD\Receipt;

class ReceiptTest extends TestCase {
    public function testTotal() {
        $Receipt = new Receipt();
        $this->assertEquals(
            14,
            $Receipt->total([0,2,5,8]),
            'When summming the total should equal 15'
        );
    }
}

这就是我运行 vendor\bin\phpunit 时的错误日志 -

PHPUnit 7.0.0 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 98 ms, Memory: 4.00MB

There was 1 error:

1) TDD\Test\ReceiptTest::testTotal
Error: Class 'TDD\Receipt' not found

C:\xampp\htdocs\PHPUnit\tests\ReceiptTest.php:10

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.

标签: unit-testingnamespacesphpunit

解决方案


首先你在主项目文件夹中的 composer.json 文件应该是这样的:

{
    "autoload": {
        "classmap": [
            "src/"
        ]
    },
    "require-dev": {
        "phpunit/phpunit": "^9"
    }
}

然后在终端composer dump-autoload中运行以创建新的自动加载文件。在此尝试运行测试 vendor/bin/phpunit 测试


推荐阅读