yguedidi / global-functions-mocker
一个简单的类,允许您模拟全局函数。
Requires
- mockery/mockery: ~0.9
- phpunit/phpunit: >3.7
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的关于期望声明和参数验证的文档,获取更多详细信息。