在控制器中的自定义类上调用 0 次嘲弄模拟和间谍
Posted
技术标签:
【中文标题】在控制器中的自定义类上调用 0 次嘲弄模拟和间谍【英文标题】:Mockery mock and spy called 0 times on custom class in controller 【发布时间】:2020-08-12 01:52:29 【问题描述】:当我测试 MyCustomClass 时,我在 Laravel 7 测试中的 spy 和 mock 遇到了困难。
我在运行 $this->get 之前尝试了 mock 和 $this->get 之后的 spy。两者都有相同的错误消息(* 下面)。
在控制器中运行调试时,$myCustomClass 仍然是 MyCustomClass 而不是模拟对象。
MyCustomClass
class MyCustomClass
public function execute()
return 'hello';
我的控制器
class MyController
public function show()
$myCustomClass = new MyCustomClass();
$data = $myCustomClass->execute();
return $data;
private $mySpy;
public function testAMethod()
$spy = $this->spy(MyCustomClass::class);
$response = $this->get('/my/path');
$spy->shouldHaveReceived('execute');
$response->assertStatus(200);
错误
Method execute(<Any Arguments>) from Mockery_2_App_MyCustomClass should be called
at least 1 times but called 0 times.
【问题讨论】:
【参考方案1】:问题是您正在使用 new
关键字自己实例化 MyCustomClass
。
为了让 Laravel 能够用 spy 替换真实的类,你必须使用 service container。
类似这样的:
class MyController
public function show(MyCustomClass $myCustomClass)
return $myCustomClass->execute();
【讨论】:
以上是关于在控制器中的自定义类上调用 0 次嘲弄模拟和间谍的主要内容,如果未能解决你的问题,请参考以下文章
在 fit 方法采用 3 个参数的自定义类上使用 sklearn GridSearchCV