我知道什么是依赖注入以及为什么要使用它(最好是注入类而不是使用new关键字,因为这样会使以后无法对其进行测试)。我将讨论laravel如何编写控制器的方法。
方式1) 可以说我在控制器中具有以下功能,我想对其进行测试。
public function index() {
$allActors = \App\Actor::all();
foreach($allActors as $actor){
$actor->name="gio";
}
return $allActors;
}
如您所见,控制器和模型紧密耦合。我的问题是为什么我不能测试这种方法?我看了拉拉维尔(Laravel)的嘲笑,认为可以接受测试。我要做的是在调用索引方法之前,模拟\ App \ Actor及其应返回的内容。为什么我不应该遵循这个想法?
方法2)
protected $actor;
public function __construct(\App\Actor $actor){
$this->actor = $actor;
}
public function index() {
$allActors = $this->actor->all();
foreach($allActors as $actor){
$actor->name="gio";
}
return $allActors;
}
现在您认为可以对此进行测试吗?怎么样?我可以想到的一件事是,在创建新控制器之前,我将创建一个新类来扩展Actor模型并覆盖其功能,在这种情况下,该类是all()函数并从文件中获取结果。
主要问题是为什么我不能在第一个示例和第二个示例中对其进行测试? DI哪个更好?似乎第二个选项是DI,但是我浏览了laravel的文档,我认为第一个示例仍然可以模拟。但是我也读到,不能嘲弄雄辩的模型。您能给我解释一下所有这些的全部想法吗?
多谢。