yguedidi/global-functions-mocker

此包已被废弃,不再维护。未建议替代包。

一个简单的类,允许您模拟全局函数。

dev-master / 1.x-dev 2014-09-17 12:00 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:49:27 UTC


README

一个简单的类,允许您在单元测试中模拟全局函数。

注意:如果您在类中不使用绝对函数调用(如\phpversion()),则此功能才有效。

安装

yguedidi/global-functions-mocker 添加到您的 composer.json 文件的 require-dev 部分

{
    "require-dev": {
        "yguedidi/global-functions-mocker": "*"
    }
}

基本用法

0 - 前提条件

1 - 设置

首先,在您的测试 setUp() 方法中调用 GlobalFunctionsMocker::setUp() 方法。
这需要在测试之间清除模拟的全局函数。

2 - 命名空间函数

创建一个与全局函数同名,但在您的测试类命名空间中的函数,并在测试文件中定义它。
该函数的主体应该是

return GlobalFunctionsMocker::execute('global_function_name', func_get_args());

3 - 模拟函数

然后只需使用 GlobalFunctionsMocker::mock('global_function_name') 在您的测试中模拟所需的全局函数。
它返回一个 Mockery\Expectation 的子集,因此您可以定义一些期望: MockedFunction

完整示例

此示例假设您的测试类和单元测试类位于不同的命名空间。

// src/FooClass.php
namespace Acme\FooClass;

class FooClass {
    public function foo()
    {
        return phpversion();
    }
}
// tests/FooClassTest.php

// Note the different namespace
namespace Acme\Tests\FooClass
{
    use Acme\FooClass;
    use YassineGuedidi\GlobalFunctionsMocker\GlobalFunctionsMocker as GFM;

    class FooClassTest extends \PHPUnit_Framework_TestCase
    {
        protected function setUp()
        {
            GFM::setUp()
        }

        public function testFoo()
        {
            GFM::mock('phpversion')->once()->withNoArgs()->andReturn('foo');
            $object = new FooClass();
            $this->assertEquals('foo', $object->foo());
        }
    }
}

// IMPORTANT: Define the function in the tested class namespace
namespace Acme\FooClass
{
    use YassineGuedidi\GlobalFunctionsMocker\GlobalFunctionsMocker as GFM;

    function phpversion()
    {
        // Don't forget 'func_get_args()' for fallback to the real global function work
        return GFM::execute('phpversion', func_get_args());
    }
}

参考

GlobalFunctionsMocker::mock($functionName)

模拟全局函数。应在您的测试中调用。

  • $functionName
    要模拟的全局函数的名称

GlobalFunctionsMocker::execute($functionName, $args)

执行模拟的全局函数。在您的命名空间全局函数定义中调用此方法。

  • $functionName
    要执行的全局函数的名称

  • $args (可选)
    传递给全局函数的参数(默认为空数组)。
    重要:在命名空间函数中应为 func_get_args()。它允许回退到真实的全局函数(如果未模拟)。

如果没有通过测试模拟函数,或者您模拟了它但未提供返回值,它将回退到真实的全局函数。

如果真实的全局函数未定义(例如,缺少PHP扩展),它将优雅地抛出 PHPUnit_Framework_SkippedTestError 异常,并带有有用的消息跳过当前测试。

MockedFunction

可用函数:with()、withArgs()、withNoArgs()、withAnyArgs()、andReturn()、andReturnValues()、andReturnUsing()、andReturnUndefined()、andReturnNull()、andThrow()、andThrowExceptions()、zeroOrMoreTimes()、times()、never()、once()、twice()、atLeast()、atMost()、between()。

请参阅Mockery的关于期望声明参数验证的文档,获取更多详细信息。

许可证

查看LICENSE文件