【问题标题】:Laravel extending Illuminate\Foundation\Testing\TestCase with custom namespaceLaravel 使用自定义命名空间扩展 Illuminate\Foundation\Testing\TestCase
【发布时间】:2017-08-24 02:04:29
【问题描述】:

我正在尝试为我的 Laravel (5.2) API 项目设置单元测试。在我使用单元测试之前,我想为它们定义一个自定义命名空间,所以我在默认的TestCase.php 文件中创建了namespace Test;。像这样:

namespace Test;

class TestCase extends Illuminate\Foundation\Testing\TestCase
{
  ...
}

然后我在tests 文件夹下创建了一个文件夹UnitTests 并将我的单元测试放在具有以下命名空间的文件夹中:

namespace Test\UnitTests;

use Test\TestCase;

class CreateAccountTest extends TestCase
{
  ...
}

现在,当我想运行单元测试时,出现以下错误:

PHP Fatal error: Class 'Test\Illuminate\Foundation\Testing\TestCase' not found in /var/www/ops/tests/TestCase.php on line 6

所以基本上,Laravel 认为 Illuminate\Foundation\Testing\TestCaseclass 位于 Test 命名空间中,而不是 Laravel 中的 Illuminatenamespace。

我还在composer.json 文件中配置了以下自动加载:

"autoload": {
    "classmap": [
        "database",
        "tests"
    ],
    "psr-4": {
        "App\\": "app/",
        "Test\\": "tests/"
    }
},
"autoload-dev": {
    "classmap": [
        "tests/TestCase.php"
    ]
}

我也试过运行这两个命令都没有成功:

  • php artisan config:cache
  • composer dump-autoload

【问题讨论】:

  • 不应该是class TestCase extends \Illuminate\Foundation\Testing\TestCase吗?
  • 没错!傻,因为我以为这个文件是由 Laravel 创建的,也许我不小心删除了斜杠什么的。感谢您的快速回复!
  • 谢谢,这解决了我的问题!
  • 请不要使用 cmets 作为答案 @xmike 否则这个问题将变得毫无用处,因为它没有答案!
  • 嗯...从来没想过...谢谢

标签: php laravel laravel-5 laravel-5.2 phpunit


【解决方案1】:

正如@xmike 在问题的 cmets 中提到的,我没有在命名空间中添加反斜杠。

所以不是

class TestCase extends Illuminate\Foundation\Testing\TestCase

应该是

class TestCase extends \Illuminate\Foundation\Testing\TestCase

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2020-07-05
    • 2018-10-16
    • 2015-10-31
    • 1970-01-01
    • 2021-10-19
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多