如何修复 PHPUnit 中的“PHP 致命错误:未捕获的 TypeError:getTest() 参数”错误

问题描述 投票:0回答:2

我正在 Laravel 项目中设置 PHP 单元,但在第一次运行时收到致命错误。有人可以帮忙吗?

我正在我的 Laravel 项目中运行,使用 Laravel 5.2.45、PHP 7.3.2 和 PHPUnit 7.2.19。这是我第一次尝试做一些测试,但当我执行测试时,我总是收到错误。

我希望当我运行 phpunit 时收到资产 true,但我收到以下错误:

PHP 致命错误:未捕获类型错误:传递给 PHPUnit\Runner\BaseTestRunner::getTest() 的参数 1 必须是字符串类型,给定对象,在 /usr/share/php/PHPUnit/TextUI/Command.php 中在线调用180 并在 /usr/share/php/PHPUnit/Runner/BaseTestRunner.php:59 中定义 堆栈跟踪:

0 /usr/share/php/PHPUnit/TextUI/Command.php(180): PHPUnit\Runner\BaseTestRunner->getTest(Object(PHPUnit\Framework\TestSuite), '', Array)

1 /usr/share/php/PHPUnit/TextUI/Command.php(159): PHPUnit\TextUI\Command->run(Array, true)

2 /usr/bin/phpunit(34): PHPUnit\TextUI\Command::main()

3 {主要} 扔在 /usr/share/php/PHPUnit/Runner/BaseTestRunner.php 第 59 行


namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $this->assertTrue(true);
    }
}

php laravel phpunit
2个回答
0
投票

对于那些维护旧 Laravel 项目的人:
维护旧项目时,应该保持生态系统原样...所以:

Laravel 5.2 需要 PHP 5.6 和 PHPUnit 4.0 https://raw.githubusercontent.com/laravel/laravel/refs/heads/5.2/composer.json

当 PHPUnit 版本和 Laravel/PHP 设置之间存在兼容性问题时,通常会发生此错误。在这种情况下,PHPUnit 7 与 PHP 7.3 不完全兼容,尤其是在使用旧版本的 Laravel(如 Laravel 5.2)时,它需要 PHPUnit 6 或更早版本。

因此使用 PHP 5.6 并使用以下命令安装 PHPUnit 4:

composer require phpunit/phpunit:4.*.


-1
投票

参见文档

您必须通过命令创建测试

// Create a test in the Unit directory...
php artisan make:test UserTest --unit

如果您已经这样做了,请检查您的

Tests\TestCase
,运行
composer dump-autoload
并重试

您还可以使用 CodeceptionLaravel5 模块 进行测试

© www.soinside.com 2019 - 2024. All rights reserved.