如何在另一个被另一个调用的函数上使用 shouldReceive?
Posted
技术标签:
【中文标题】如何在另一个被另一个调用的函数上使用 shouldReceive?【英文标题】:How do I use shouldReceive on a function that was called by another? 【发布时间】:2019-08-21 01:39:59 【问题描述】:我有这样的功能:
// $value could be an array or SomeClass type
public function foo($key, $value)
// some code
if ($value instanceof SomeClass)
$value = $this->bar($value);
// some code
protected function bar(SomeClass $value)
// do stuff
现在在我的测试中,我有这样的东西:
$suppliedValue = [];
$mock = ... // create mock
$mock->shouldReceive('foo')->withArgs(
// first arg should be an int or string
// second arg should be an array or SomeClass object
);
if (typeOf($suppliedValue) === 'array')
$mock->shouldNotReceive('bar');
else
$mock->shouldReceive('bar');
$mock->aFunctionThatCallsFoo($suppliedValue);
但它似乎不起作用,无论向foo()
提供什么值,它都不会触发bar()
上的shouldReceive()
/ shouldNotReceive()
。
我在这里缺少什么?我感觉好像我误解了关于嘲笑的一些基本原理。
【问题讨论】:
【参考方案1】:我没有找到通过模拟解决此问题的方法,但我改用了Spy。
$spy = Mockery::spy(TheClass::class)
->makePartial()
->shouldAllowMockingProtectedMethods();
$spy->aFunctionThatCallsFoo($suppliedValue);
$spy->shouldHaveReceived('foo')
->withArgs(/* args */);
$spy->shouldHaveReceived('bar');
我最终创建了 2 个测试函数,而不是使用 if else
来表示 $suppliedValue
的类型,而另一个调用 shouldNotHaveReceived()
【讨论】:
以上是关于如何在另一个被另一个调用的函数上使用 shouldReceive?的主要内容,如果未能解决你的问题,请参考以下文章
python在一个文件封装了几个函数,在另一个文件上导入这个文件来调用某一条函数,却直接运行了整个文件?
调用未定义的函数 wp_should_load_separate_core_block_assets() wordpress