PHP斯坦
PHP单元
此扩展提供以下功能:
createMock()
、 getMockForAbstractClass()
和getMockFromWsdl()
方法返回模拟对象和模拟类的交集类型(请参阅交集类型的详细说明),以便来自模拟对象(如expects
)和模拟类的方法可以在对象上使用。
还支持在MockBuilder
上调用getMock()
。
解释 phpDoc 中的Foo|PHPUnit_Framework_MockObject_MockObject
,以便生成交集类型而不是联合类型。
定义PHPUnitFrameworkTestCase
类的提前终止方法调用,以防止未定义的变量错误。
指定传递给各种assert
方法的表达式类型,例如assertInstanceOf
、 assertTrue
、 assertInternalType
等。
结合PHPStan的level 4,它指出了always-true和always-false断言,如assertTrue(true)
等。
它还包含严格的特定于框架的规则(可以单独启用):
检查您是否未将assertSame()
与预期值true
一起使用。应改用assertTrue()
。
检查您是否未将assertSame()
与预期值false
一起使用。应改用assertFalse()
。
检查您是否未使用将null
作为预期值的assertSame()
。应改用assertNull()
。
检查您是否未使用带有count($variable)
作为第二个参数的assertSame()
。应改用assertCount($variable)
。
如果您需要在将模拟分配给属性或从方法返回它之后配置模拟,则应该将PHPUnit_Framework_MockObject_MockObject
添加到 phpDoc:
/** * @return Foo&PHPUnit_Framework_MockObject_MockObject */私有函数createFooMock() { 返回 $this->createMock(Foo::class); } 公共函数 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;受保护的函数 setUp() { $fooMock = $this->createMock(Foo::class); $fooMock->method('doFoo')->will($this->returnValue('test')); $this->foo = $fooMock; } 公共函数 testSomething() { $this->foo->doFoo(); // $this->foo->method() 和expects() 不能再被调用}
要使用此扩展,请在 Composer 中需要它:
composer require --dev phpstan/phpstan-phpunit
如果您还安装了 phpstan/extension-installer 那么您就已经准备好了!
如果您不想使用phpstan/extension-installer
,请在项目的 PHPStan 配置中包含 extension.neon :
includes: - vendor/phpstan/phpstan-phpunit/extension.neon
要执行特定于框架的检查,还请包含此文件:
- vendor/phpstan/phpstan-phpunit/rules.neon