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