gpt4 book ai didi

php - mock :如何将 shouldReceive 与 method_exists 一起使用?

转载 作者:可可西里 更新时间:2023-11-01 13:01:05 27 4
gpt4 key购买 nike

在我的应用程序代码中,我有一个 method_exists 检查来授权创建过程中的一些 Hook :

// Note: $myClass is implementing a ListItemFactory interface.

if ($isCreate) {
$methodName = "create{$attr}ListItem";

if (method_exists($myClass, $methodName)) {
$item = $myClass->$methodName();
} else {
[...]
}
}

我正在尝试测试此代码,模拟 $myClass 并检查是否确实调用了 $methodName。这是我编写测试的方式:

/** @test */
function specific_create_method_is_called()
{
$factory = Mockery::mock(ListItemFactory::class)->makePartial();
$factory->shouldReceive("createCommentsListItem")->once();
[...]
}

但这不起作用,因为 method_exists 未在模拟中定义。我对模拟东西还很陌生,所以也许有一种明显的方法可以解决这个问题,比如“ stub ”所需的功能,但我找不到方法......

在此先感谢您的帮助。

最佳答案

创建一个小型测试类并对其进行部分模拟。在你的测试类范围内定义:

class MyClass implements ListItemFactory {
public function createCommentsListItem() { }
}

然后,在你的测试函数中:

/** @test */
function specific_create_method_is_called()
{
$myClass = m::mock(MyClass::class)->makePartial();

$myClass->shouldReceive('createCommentsListItem')->once();

// method_exists($myClass, 'createCommentsListItem')
// returns true now
}

(在此示例中:将 Mockery 用作 m;)

关于php - mock :如何将 shouldReceive 与 method_exists 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856225/

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