hermeslin / mockery-overload-properties
通过Mockery的重载关键字模拟mock实例的属性
v1.0.1
2018-02-25 10:57 UTC
Requires
- php: >=5.6.0
- mockery/mockery: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.10
- phpunit/phpunit: ^6.5
- squizlabs/php_codesniffer: ^3.2
This package is not auto-updated.
Last update: 2024-09-29 05:01:51 UTC
README
通过Mockery的重载关键字模拟mock实例的属性
安装
使用composer安装mockery-overload-properties
$ composer require --dev hermeslin/mockery-overload-properties
测试遗留代码示例
在example
文件夹下,您可以看到我们想要测试的示例代码
- User.php
- Vip.php
您将在Vip.php
中找到硬依赖。
硬依赖不是什么大问题,您可以使用Mockery的overload
关键字轻松模拟User
实例,但模拟在User
的__construct
阶段设置的属性则比较困难。
测试用例
在tests
文件夹下,这里有两个测试用例
- LegacyCodeFailTest.php
- LegacyCodeSuccessTest.php
查看tests\LegacyCodeSuccessTest.php
将向您展示如何使用mockery-overload-properties
来模拟User
/** * @test */ public function notVipUserBonusShouldCorrect() { $properties = [ 'id' => 2, 'isVip' => false, 'rank' => 99 ]; $user = mop::mock('\User', $properties); // bounus should be 149 $bunus = 100 * 0.5 + 99; $vip = new Vip; $this->assertEquals($bunus, $vip->bonus($userId = 2)); }
当模拟带有属性的实例时,您仍然可以使用Mockery
的Expectation Declarations
来测试您的代码。
/** * @test */ public function notVipUserBonusShouldCorrect() { $properties = [ 'id' => 2, 'isVip' => false, 'rank' => 99 ]; $user = mop::mock('\User', $properties); // Expectation $user->shouldReceive('name_of_method'); ->with($arg1, $arg2, ...); ->andReturn($value); // etc... }