存根PHP本机方法

时间:2010-03-31 13:35:29

标签: php phpunit native mocking stub

在我的单元测试中,我想查看php的内置file_get_contents()方法的行为。

有没有办法在PHP中存根本机方法(例如file_get_contents()或print_r())等等?

4 个答案:

答案 0 :(得分:3)

如果用“stub”表示替换,则有一个PHP override_function函数;但它是PECL的一部分。你也可以rename他们。

答案 1 :(得分:2)

可以使用runkit。使用runkit_function_copy和runkit_function_redefine函数复制和重新定义函数。您应该将runkit.internal_override ini-setting设置为1以修改内部函数。

答案 2 :(得分:0)

你不清楚'存根'是什么意思。

您的意思是获取函数的doc,例如:

/**
 * (PHP 5 &gt;= 5.1.0)<br/>
 * Sets the default timezone used by all date/time functions in a script
 * @link http://php.net/manual/en/function.date-default-timezone-set.php
 * @param timezone_identifier string <p>
 * The timezone identifier, like UTC or
 * Europe/Lisbon. The list of valid identifiers is
 * available in the .
 * </p>
 * @return bool This function returns false if the
 * timezone_identifier isn't valid, or true
 * otherwise.
 */
function date_default_timezone_set ($timezone_identifier) {}

答案 3 :(得分:0)

PHP-5.3's namespace fallback policy开始,您可以覆盖非全局命名空间上下文中对非限定函数名的调用:

  

对于函数[...],如果命名空间函数[...]不存在,PHP将回退到全局函数[...]。

即。例如,调用非限定函数名称file_get_contents()。可以通过提供foo来覆盖名称空间foo\file_get_contents()


我最近创建了库PHP-Mock,为time()等非确定性PHP函数提供了模拟。