davesweb / mockery-helper
一组辅助工具,用于创建使用Mockery库的有用单元测试
Requires
- php: ^7.1.0
- mockery/mockery: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.7
- phpro/grumphp: ^0.12.0
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2024-09-13 00:42:42 UTC
README
这是一个库,可以帮助你以最佳方式使用Mockery。
当前稳定版本:1.1.0
安装
通过composer
composer require davesweb/mockery-helper
如果你只需要在开发模式下测试依赖项,请使用--dev选项。
通过composer.json文件
你还可以直接将此包添加到你的composer.json文件中。将以下行添加到你的require块或require-dev块中
"davesweb/mockery-helper": "^1.1"
然后运行
composer update davesweb/mockery-helper
用法
安装完此包后,您可以在测试中使用提供的特性
<?php namespace My\Tests; use Davesweb\MockeryHelper\UsesMockery; use PHPUnit\Framework\TestCase; class UsesMockeryTest extends TestCase { use UsesMockery; }
此特性确保您的Mockery期望得到强制执行,因为它扩展了Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration特性。因此,如果您使用此特性,则不再需要调用\Mockery::close()。
方法
此特性提供了以下方法。
方法
签名
public function method(callable $callable): string
如果您需要将方法名传递给Mockery期望,请使用此方法。此方法接受一个可调用对象作为其参数,确保您想要传递的方法名被IDE识别为方法名。这样,当您重构代码时,方法名也会在单元测试中重构。
此方法还会检查方法是否实际存在,因此您不会在方法名中犯任何错误。
可调用对象可以以下形式传递:'ClassName::method'、[ClassName::class, 'method']或[$object, 'method']。
方法方法返回方法名。
示例用法
<?php namespace My\Tests; use Davesweb\MockeryHelper\UsesMockery; use PHPUnit\Framework\TestCase; use Some\Package\MyDependency; class UsesMockeryTest extends TestCase { use UsesMockery; public function setUp() { $mockedDependency = \Mockery::mock(MyDependency::class); $mockedDependency ->shouldReceive($this->method([MyDependency::class, 'methodItShouldReceive'])) ->with('param 1', 'param 2') ->once() ->andReturn('My return value'); //... } }
mock
签名
public function mock(...$args): MockInterface
这是Mockery::mock(...$args): MockerInterface调用的别名。请参阅Mockery文档了解如何使用此方法。
spy
签名
public function spy(...$args): MockInterface
这是Mockery::spy(...$args): MockerInterface调用的别名。请参阅Mockery文档了解如何使用此方法。
namedMock
签名
public function namedMock(...$args): MockInterface
这是Mockery::namedMock(...$args): MockerInterface调用的别名。请参阅Mockery文档了解如何使用此方法。
跳过方法存在性检查。
有时您可能需要能够跳过检查方法是否实际定义在类上,同时仍然保持重构选项。例如,如果您使用魔法方法__call()来处理某些方法调用。
在这种情况下,您可以通过覆盖allowNonExistingMethods属性或在其测试中设置它来禁用检查。
class UsesMockeryTest extends TestCase { use UsesMockery; /** * {@inheritdoc} */ protected $allowNonExistingMethods = true; public function test_something() { // This entire test case won't check if methods exist. } }
class UsesMockeryTest extends TestCase { use UsesMockery; public function test_something() { $this->allowNonExistingMethods = true; // Only this test won't check if methods exist. } }
您还可以通过向method调用添加第二个参数来按方法调用设置检查。将其设置为true以强制执行检查,即使全局设置是要跳过检查。或将它设置为false以仅对该方法调用跳过检查。
class UsesMockeryTest extends TestCase { use UsesMockery; public function test_something() { $method = $this->method([MyDependency::class, 'someNonExistingMethod'], false); // Only the above call skips the check if the method exists } }
贡献
感谢您花时间改进此包!如果您想为此包做出贡献,请首先阅读以下文件:贡献。