我正在尝试使用 PHPUnit 12 dataProviders 向要测试的函数提供数据,但无法使其正常工作。
这是我的单元测试(位于tests/TestTest.php
):
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class TestTest extends TestCase
{
public static function dataProvider(): array
{
return [['a'], ['b']];
}
#[DataProvider("dataProvider")]
public function testTest($var): void
{
$this->assertTrue(true);
}
}
当我跑步时./vendor/bin/phpunit tests
我得到了这个:
PHPUnit 12.0.0 by Sebastian Bergmann and contributors.
Runtime: PHP 8.3.14
E 1 / 1 (100%)
Time: 00:00.019, Memory: 8.00 MB
There was 1 error:
1) TestTest::testTest
ArgumentCountError: Too few arguments to function TestTest::testTest(), 0 passed in C:\path\to\vendor\phpunit\phpunit\src\Framework\TestCase.php on line 1104 and exactly 1 expected
C:\path\to\tests\TestTest.php:12
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
有什么想法吗?
有两件事值得了解:
PhpUnit 10 开始支持 PHP 8 属性。PHPUnit 11 弃用了旧版 @annotations。PHPUnit 12 删除了 @annotations。
PHP 属性必须未实现。否则,它们将无法被实例化。因此,在 #[ATTRIBUTE-NAME] 中使用不存在的类名将不会被注意到。
由于您通过DataProvider(“dataProvider”)来激发诊断
它显示该属性无效。这只是一个简单的拼写错误,之前的 @dataProvider 注解的正确类名应该是PHPUnit_Framework_Attributes_DataProvider。
标准类名解析规则适用,要么完全限定
或别名,就你的情况而言
在(有时是隐式的)命名空间段的开头就足够了。
在 PHPUnit 10+ 中,您需要执行以下操作之一:
导入属性类或
使用完全限定名称(旧
@dataProvider
文档块)。导入
或旧方法