【发布时间】: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()。
我在这里缺少什么?我感觉好像我误解了关于嘲笑的一些基本原理。
【问题讨论】:
标签: php laravel mocking laravel-5.4 mockery