gpt4 book ai didi

php - 如何在PHP中 stub 此函数

转载 作者:行者123 更新时间:2023-12-03 10:06:55 37 4
gpt4 key购买 nike

我要测试以下类(class):

<?php

namespace Freya\Component\PageBuilder\FieldHandler;

use Freya\Component\PageBuilder\FieldHandler\IFieldHandler;

/**
* Used to get a set of non empty, false or null fields.
*
* The core purpose is to use this class to determine that A) Advanced Custom Fields is installed
* and B) that we get back a set of fields for a child page.
*
* The cavete here is that this class requires you to have child pages that then have Custom Fields that
* you want to display on each of those pages. getting other page information such as content, title, featured image
* and other meta boxes is left ot the end developer.
*
* @see Freya\Component\PageBuilder\FieldHandler\IFieldHandler
*/
class FieldHandler implements IFieldHandler {

/**
* {@inheritdoc}
*
* @return bool
*/
public function checkForAFC() {
return function_exists("register_field_group");
}

/**
* {@inheritdoc}
*
* @param $childPageID - the id of the child page who may or may not have custom fields.
* @return mixed - Null or Array
*/
public function getFields($childPageId) {
$fieldsForThisPage = get_fields($childPageId);

if (is_array($fieldsForThisPage)) {
foreach ($fieldsForThisPage as $key => $value) {
if ($value === "" || $value === false || $value === null) {
unset($fieldsForThisPage[$key]);
}
}

return $fieldsForThisPage;
}

return null;
}
}

我可以测试所有这些,但是我想做的一件事是对 get_fields()函数进行 stub 操作,说您将返回此类型的数组,然后再使用该函数的其余部分使用它的方式,在本例中是遍历它。

我不知道如何在php中执行的部分是将正在调用的函数 stub ,然后说您将返回x。

那么如何对get_fields stub ?

最佳答案

您可以在此处使用带有不合格函数名称get_fields()的技巧。由于您没有使用完全限定的函数名称\get_fields(),PHP将首先尝试在当前 namespace 中查找该函数,然后回退到全局函数名称。

有关合格和不合格的定义,请参见:http://php.net/manual/en/language.namespaces.basics.php(类似于绝对文件名和相对文件名)

因此,您要做的就是在类的 namespace 中定义函数,以及测试用例,如下所示:

namespace Freya\Component\PageBuilder\FieldHandler;

function get_fields()
{
return ['X'];
}

class FieldHandlerTest extends \PHPUnit_Test_Case
{
...
}

附加条款:
  • 您可以对核心功能执行相同的操作,如下所述:http://www.schmengler-se.de/en/2011/03/php-mocking-built-in-functions-like-time-in-unit-tests/
  • 此技巧仅适用于函数,不适用于类。全局 namespace 中的类始终必须以反斜杠开头。
  • 关于php - 如何在PHP中 stub 此函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323383/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com