Shmock PHP 测试框架开源项目

我要开发同款
匿名用户2014年04月14日
49阅读
开发技术PHP
所属分类开发工具、单元测试工具
授权协议Apache

作品详情

Shmock(SHorthandforMOCKing)是PHPUnit创建mocks的平稳替代,使用EasyMock的mock/replay概念,但是又使用mocking定义的闭包范围。

示例代码:

<?php    namespace Foo;    /**     * Here's a class we're trying to test yay.     */    class Foo    {        private $foo = 0;        private $incrementing_service = null;        public function __construct(Incrementing_Service $incrementing_service)        {            $this->incrementing_service = $incrementing_service;        }        public function next_foo()        {            $this->foo = $this->incrementing_service->increment($this->foo);            return $this->foo;        }    }    /**     * Our test case runs the same test case twice - once with the original PHPUnit mocking     * syntax and a second time with Shmock syntax.     */    class Foo_Test extends PHPUnit_Framework_TestCase    {                use \Shmock\Shmockers; // This enables the use of the Shmock helper methods (replicated below)                public function test_phpunit_original_mocking_syntax()        {            // this is the original PHPUnit mock syntax            $incrementing_service_mock = $this->getMock('\Foo\Incrementing_Service', array('increment'));            $incrementing_service_mock->expects($this->once())                ->method('increment')                ->with($this->equalTo(0))                ->will($this->returnValue(1));            $foo = new Foo($incrementing_service_mock);            $this->assertEquals(1, $foo->next_foo(0));        }        /**         * Create a shmock representation for $class_name and configure expected         * mock interaction with $conf_closure         * @return Shmock A fully configured mock object         * @note You do not need this protected method if you use the Shmockers trait, shown above         */        protected function shmock($class_name, $conf_closure)        {            return \Shmock\Shmock::create_class($this, $class_name, $conf_closure);        }        public function test_shmock_syntax()        {            // here's shmock. Neat huh?            $incrementing_service_mock = $this->shmock('\Foo\Incrementing_Service', function($shmock)            {                $shmock->increment(0)->return_value(1);            });            $foo = new Foo($incrementing_service_mock);            $this->assertEquals(1, $foo->next_foo(0));        }    }

 

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论