phpstan / phpstan-phpunit
PHPStan 的 PHPUnit 扩展和规则
1.4.0
2024-04-20 06:39 UTC
Requires
- php: ^7.2 || ^8.0
- phpstan/phpstan: ^1.11
Requires (Dev)
- nikic/php-parser: ^4.13.0
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/phpstan-strict-rules: ^1.5.1
- phpunit/phpunit: ^9.5
Conflicts
- phpunit/phpunit: <7.0
- 2.0.x-dev
- 1.4.x-dev
- 1.4.0
- 1.3.x-dev
- 1.3.16
- 1.3.15
- 1.3.14
- 1.3.13
- 1.3.12
- 1.3.11
- 1.3.10
- 1.3.9
- 1.3.8
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.x-dev
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- 0.12.22
- 0.12.21
- 0.12.20
- 0.12.19
- 0.12.18
- 0.12.17
- 0.12.16
- 0.12.15
- 0.12.14
- 0.12.13
- 0.12.12
- 0.12.11
- 0.12.10
- 0.12.9
- 0.12.8
- 0.12.7
- 0.12.6
- 0.12.5
- 0.12.4
- 0.12.3
- 0.12.2
- 0.12.1
- 0.12.0
- 0.11.2
- 0.11.1
- 0.11
- 0.10
- 0.9.4
- 0.9.3
- 0.9.2
- 0.9.1
- 0.9
- dev-renovate/major-root-composer
- dev-renovate/major-github-actions
This package is auto-updated.
Last update: 2024-09-13 12:47:14 UTC
README
此扩展提供以下功能
createMock()
、getMockForAbstractClass()
和getMockFromWsdl()
方法返回模拟对象和被模拟类的交集类型(见交集类型的详细解释),因此对象上既可以使用模拟对象的(如expects
)方法,也可以使用被模拟类的方法。- 也支持在
MockBuilder
上调用getMock()
。 - 在 phpDoc 中解释
Foo|PHPUnit_Framework_MockObject_MockObject
,使其结果为交集类型而不是联合类型。 - 为
PHPUnit\Framework\TestCase
类定义早期终止方法调用,以防止未定义变量错误。 - 指定传递给各种
assert
方法(如assertInstanceOf
、assertTrue
、assertInternalType
等)的表达式的类型。 - 结合 PHPStan 的第 4 级别,它会指出始终为真和始终为假的断言,如
assertTrue(true)
等。
它还包含以下严格框架特定的规则(可以单独启用)
- 检查您是否没有使用
assertSame()
与true
作为预期值。应使用assertTrue()
。 - 检查您是否没有使用
assertSame()
与false
作为预期值。应使用assertFalse()
。 - 检查您是否没有使用
assertSame()
与null
作为预期值。应使用assertNull()
。 - 检查您是否没有使用
assertSame()
与count($variable)
作为第二个参数。应使用assertCount($variable)
。
如何在 phpDocs 中记录模拟对象?
如果您需要在将模拟对象分配给属性或从方法返回后配置模拟对象,则应在 phpDoc 中添加 PHPUnit_Framework_MockObject_MockObject
。
/** * @return Foo&PHPUnit_Framework_MockObject_MockObject */ private function createFooMock() { return $this->createMock(Foo::class); } public function testSomething() { $fooMock = $this->createFooMock(); $fooMock->method('doFoo')->will($this->returnValue('test')); $fooMock->doFoo(); }
请注意,交集类型的正确语法是 Foo&PHPUnit_Framework_MockObject_MockObject
。也支持 Foo|PHPUnit_Framework_MockObject_MockObject
,但仅出于生态系统和旧版原因。
如果模拟对象完全配置,并且只应在值上调用被模拟类的方法,则只需类型提示被模拟类即可。
/** @var Foo */ private $foo; protected function setUp() { $fooMock = $this->createMock(Foo::class); $fooMock->method('doFoo')->will($this->returnValue('test')); $this->foo = $fooMock; } public function testSomething() { $this->foo->doFoo(); // $this->foo->method() and expects() can no longer be called }
安装
要使用此扩展,请在 Composer 中要求它
composer require --dev phpstan/phpstan-phpunit
如果您还安装了 phpstan/extension-installer,那么您就准备就绪了!
手动安装
如果您不想使用 phpstan/extension-installer
,请将 extension.neon 包含在项目的 PHPStan 配置中
includes:
- vendor/phpstan/phpstan-phpunit/extension.neon
要执行框架特定的检查,请也包含此文件
- vendor/phpstan/phpstan-phpunit/rules.neon