phpstan/phpstan-phpunit

PHPStan 的 PHPUnit 扩展和规则

安装次数: 56,978,227

依赖者: 6,003

建议者: 7

安全: 0

星标: 453

关注者: 8

分支: 46

开放性问题: 34

类型:phpstan-extension


README

Build Latest Stable Version License

此扩展提供以下功能

  • createMock()getMockForAbstractClass()getMockFromWsdl() 方法返回模拟对象和被模拟类的交集类型(见交集类型的详细解释),因此对象上既可以使用模拟对象的(如 expects)方法,也可以使用被模拟类的方法。
  • 也支持在 MockBuilder 上调用 getMock()
  • 在 phpDoc 中解释 Foo|PHPUnit_Framework_MockObject_MockObject,使其结果为交集类型而不是联合类型。
  • PHPUnit\Framework\TestCase 类定义早期终止方法调用,以防止未定义变量错误。
  • 指定传递给各种 assert 方法(如 assertInstanceOfassertTrueassertInternalType 等)的表达式的类型。
  • 结合 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