Laravel 8 Facades 相较于依赖注入
依赖注入的主要好处之一是能交换注入类的实现。在测试的时候非常有用,因为你可以注入一个 mock 或者 stub,并断言 stub 上的各种方法。
通常,真正的静态方法是不可能 mock 或 stub 的。但是 Facades 使用动态方法对服务容器中解析出来的对象方法的调用进行了代理,我们也可以像测试注入类实例一样测试 Facades。比如,像下面的路由:
use Illuminate\Support\Facades\Cache;
Route::get('/cache', function () {
return Cache::get('key');
});
我们可以带上我们期望的参数编写下面的测试代码来验证 Cache::get
方法:
use Illuminate\Support\Facades\Cache;
/**
* 一个基础功能的测试用例。
*
* @return void
*/
public function testBasicExample()
{
Cache::shouldReceive('get')
->with('key')
->andReturn('value');
$this->visit('/cache')
->see('value');
}