我正在 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);
}
}
对于那些维护旧 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.*.
参见文档
您必须通过命令创建测试
// Create a test in the Unit directory...
php artisan make:test UserTest --unit
如果您已经这样做了,请检查您的
Tests\TestCase
,运行 composer dump-autoload
并重试
您还可以使用 Codeception 和 Laravel5 模块 进行测试