这里的原则就像在所有测试中一样。在代码中直接调用静态函数BlogModel
取决于编写测试时不好的类。您希望将依赖项注入到您的类中,以便您可以单独测试您的类。您可以通过两种方式执行此操作(除非使用依赖注入容器),要么使用构造函数注入,要么使用 setter 注入它们。
构造函数注入
class SomeClass
{
private $blogModelClass;
public function __construct(BlogModel $blogModelClass)
{
$this->blogModelClass = $blogModel;
}
private function loadModel()
{
if($this->blogModel) {
return;
}
$this->blogModel = $this->blogModelClass->find($this->id);
}
}
二传手注入
class SomeClass
{
private $blogModelClass;
public function setBlogModelClass(BlogModel $blogModelClass)
{
$this->blogModelClass = $blogModel;
}
private function loadModel()
{
if($this->blogModel) {
return;
}
$this->blogModel = $this->blogModelClass->find($this->id);
}
}
测试
现在您可以在构造函数中注入依赖项或使用 getter,所以这些是您的选择
// Constructor injection
$someClass = new SomeClass(new BlogModel);
// Setter injection
$someClass = new SomeClass();
$someClass->setBlogModelClass(new BlogModel);
在编写测试时,您现在可以轻松地插入一个模拟对象并模拟它的响应。