【发布时间】:2017-01-13 11:47:37
【问题描述】:
我有一个有趣的场景,我需要定义一个函数来测试另一个函数。我要测试的函数如下所示:
if (function_exists('foo') && ! function_exists('baz')) {
/**
* Baz function
*
* @param integer $n
* @return integer
*/
function baz($n)
{
return foo() + $n;
}
}
我检查foo 是否存在的原因是因为它可能会或可能不会在开发人员的项目中定义,并且函数baz 依赖于foo。因此,如果baz 可以调用foo,我只想定义它。
唯一的问题是到目前为止还无法为其编写测试。我尝试在 PHPUnit 配置中创建一个引导脚本,该脚本将定义一个假的 foo 函数,然后需要 Composer 自动加载器,但我的主脚本仍然认为 foo 未定义。 foo 不是 Composer 包,因此我的项目不需要。显然,嘲弄也不会为此工作。我的问题是,是否有任何对 PHPUnit 更有经验的人遇到过这个问题并找到了解决方案。
谢谢!
【问题讨论】:
-
如何为测试函数命名空间?我不是 100% 知道您对测试功能的实现是什么,但是:stackoverflow.com/a/12128017/2119863
-
问题是我需要定义一个不存在的函数来测试依赖于它的函数@UnamataSanatarai。我不需要更改现有功能的实现。
-
如果我可以在您的示例中添加一个
namespace,我会用php-mock-phpunit 给您一个答案。否则就选择 runkit 之类的东西。 -
Grrr。 php-mock-phpunit 看起来很棒,但不幸的是,我需要模拟的函数位于根名称空间中(来自 WordPress 插件;是的,不要问我为什么使用 WordPress -__-)所以我会看看 runkit 跨度>
-
你根本无法模拟这种程序代码。我要么将这些东西包装在一个可模拟的类中,要么使用(环境)定义,如 C 风格的标题保护。
标签: php unit-testing mocking phpunit