danrevah/shortifypunit
Composer 安装命令:
composer require danrevah/shortifypunit
包简介
PHP Mocking framework
README 文档
README
PHP Mocking Framework, inspired by Mockito library for Java
Table of contents
Installation
PHP Version >= 5.4 is required!
The following instructions outline installation using Composer. If you don't have Composer, you can download it from http://getcomposer.org/
$ composer require "danrevah/shortifypunit":"dev-master"
$ php composer.phar require "danrevah/shortifypunit":"dev-master"
Mocking Examples
// Creating a new mock for SimpleClassForMocking $mock = ShortifyPunit::mock('SimpleClassForMocking'); // Returns NULL, was not stubbed yet $mock->first_method();
Basic mocking example, if a function wasn't stubbed the return value will always be NULL.
Stubbing
// Creating a new mock for SimpleClassForMocking $mock = ShortifyPunit::mock('SimpleClassForMocking'); // Stubbing first_method() function without arguments ShortifyPunit::when($mock)->first_method()->returns(1); echo $mock->first_method(); // prints '1' // Stubbing first_method() function with arguments ShortifyPunit::when($mock)->first_method(1,2)->returns(2); echo $mock->first_method(); // still prints '1' echo $mock->first_method(1,2); // prints '2' // Stubbing callback ShortifyPunit::when($mock)->first_method()->callback(function() { echo 'Foo Bar'; }); echo $mock->first_method(); // prints 'Foo Bar' // Stubbing throws exception ShortifyPunit::when($mock)->second_method()->throws(new Exception()); $mock->second_method(); // throws Exception
The when function is used to stubbing methods with specific parameters, following a throws, returns or a callback action.
Methods:
throws($exception)- Throws an exceptionreturns($response)- Returns a $responsecallback(function() { /*...*/ })- Calling a callback
Partial Mock
partial mock is used when you need some of the methods to behave normally except from that one method you need to test. that can be done with partial mock, it keeps the logic unless you stub the method.
class Foo { function bar() { return 'bar'; } } $mock = ShortifyPunit::mock('Foo'); $partialMock = ShortifyPunit::partialMock('Foo'); $mock->bar(); // returns NULL echo $partialMock->bar(); // prints 'bar' ShortifyPunit::when($partialMock)->bar()->returns('foo'); // stubbing partialMock echo $partialMock->bar(); // prints 'foo'
Stubbing Method Chaining
// Creating a new mock for SimpleClassForMocking $mock = ShortifyPunit::mock('SimpleClassForMocking'); ShortifyPunit::when($mock)->first_method()->second_method(1)->returns(1); ShortifyPunit::when($mock)->first_method()->second_method(2)->returns(2); ShortifyPunit::when($mock)->first_method(1)->second_method(1)->returns(3); ShortifyPunit::when($mock)->first_method(2)->second_method(2)->third_method()->returns(4); echo $mock->first_method()->second_method(1); // prints '1' echo $mock->first_method()->second_method(2); // prints '2' echo $mock->first_method(1)->second_method(1); // prints '3' echo $mock->first_method(2)->second_method(2)->third_method(); // prints '4'
when function is also used to stub chained methods, follows the same actions as the single function stubbing return, throw or callback.
Verifying
Once created, mock will remember all invocations. Then you can selectively verify some interaction you are inserted in.
$mock = ShortifyPunit::mock('SimpleClassForMocking'); ShortifyPunit::when($mock)->first_method()->returns(1); echo $mock->first_method(); // method called once ShortifyPunit::verify($mock)->first_method()->neverCalled(); // returns FALSE ShortifyPunit::verify($mock)->first_method()->atLeast(2); // returns FALSE ShortifyPunit::verify($mock)->first_method()->calledTimes(1); // returns TRUE echo $mock->first_method(); // method has been called twice ShortifyPunit::verify($mock)->first_method()->neverCalled(); // returns FALSE ShortifyPunit::verify($mock)->first_method()->atLeast(2); // returns TRUE ShortifyPunit::verify($mock)->first_method()->calledTimes(2); // returns TRUE
Methods:
atLeast($times)- Verify called at least $timesatLeastOnce()- Alias of atLeast(1)calledTimes($times)- Verify called exactly $timesneverCalled()- Alias of calledTimes(0)lessThan($times)- Verify called less than $times
Argument Matcher
ShortifyPunit allows the use of Hamcrest PHP (https://github.com/hamcrest/hamcrest-php) matcher on any argument. Hamcrest is a library of "matching functions" that, given a value, return true if that value matches some rule.
Hamcrest matchers are included by default.
Examples:
class Foo { function bar($arg){} } $stub = ShortifyPunit::mock('Foo'); ShortifyPunit::when($stub)->bar(anything())->return('FooBar');
Some common Hamcrest matchers:
- Core
anything- always matches, useful if you don't care what the object under test is
- Logical
allOf- matches if all matchers match, short circuits (like PHP &&)anyOf- matches if any matchers match, short circuits (like PHP ||)not- matches if the wrapped matcher doesn't match and vice versa
- Object
equalTo- test object equality using the == operatoranInstanceOf- test typenotNullValue,nullValue- test for null
- Number
closeTo- test floating point values are close to a given valuegreaterThan,greaterThanOrEqualTo,lessThan,lessThanOrEqualTo- test ordering
- Text
equalToIgnoringCase- test string equality ignoring caseequalToIgnoringWhiteSpace- test string equality ignoring differences in runs of whitespacecontainsString,endsWith,startsWith- test string matching
danrevah/shortifypunit 适用场景与选型建议
danrevah/shortifypunit 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4.21k 次下载、GitHub Stars 达 32, 最近一次更新时间为 2014 年 11 月 28 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 danrevah/shortifypunit 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 danrevah/shortifypunit 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 4.21k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 33
- 点击次数: 4
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2014-11-28