Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Laravel 10.x - A facade root has not been set.解决办法

Laravel 10.x - A facade root has not been set.解决办法

原创
作者头像
用砖头敲代码
发布于 2024-08-30 05:28:19
发布于 2024-08-30 05:28:19
2440
举报
文章被收录于专栏:用砖头敲代码用砖头敲代码

今天在laravel单元测试中使用Http请求接口时,报错显示A facade root has not been set.

默认单元测试的代码是这样的

代码语言:php
AI代码解释
复制
<?php

namespace Tests\Unit;

use Illuminate\Support\Facades\Http;
use PHPUnit\Framework\TestCase;
use Tests\CreatesApplication;

class ExampleTest extends TestCase
{
    /**
     * A basic test example.
     */
    public function test_that_true_is_true(): void
    {
        $resp= Http::get('https://b.example.com/login')->json();
        var_dump($resp);
        $this->assertTrue(true);
    }

}

找到解决办法,如下:

代码语言:php
AI代码解释
复制
<?php

namespace Tests\Unit;

use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\Http;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

class ExampleTest extends BaseTestCase
{
    /**
     * A basic test example.
     */
    public function test_that_true_is_true(): void
    {
        $resp= Http::get('https://b.example.com/login')->json();
        var_dump($resp);
        $this->assertTrue(true);
    }

    public function createApplication()
    {
        // TODO: Implement createApplication() method.
        $app = require __DIR__.'/../bootstrap/app.php';
        $app->make(Kernel::class)->bootstrap();
        return $app;
    }
}

不太优美,感觉不是laravel的风格,于此同时在单元测试目录下发现一个CreatesApplication的trait类,于是修改代码为这样

代码语言:php
AI代码解释
复制
<?php

namespace Tests\Unit;

use Illuminate\Support\Facades\Http;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Tests\CreatesApplication;

class ExampleTest extends BaseTestCase
{
    use CreatesApplication;

    /**
     * A basic test example.
     */
    public function test_that_true_is_true(): void
    {
        $resp= Http::get('https://b.example.com/login')->json();
        var_dump($resp);
        $this->assertTrue(true);
    }
}

emmmm....非常优美,这才是laravel的感觉,再次运行单元测试,完美通过

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
带你学习 ReentrantLock
一个线程可多次获取锁,但同时也要释放相同的次数,否则该线程将持续拥有锁,其他线程将无法进入临界区。
大发明家
2021/12/18
3330
高并发编程-ReentrantLock非公平锁深入解析
ReentrantLock是一个可重入的互斥锁,它不但具有synchronized实现的同步方法和同步代码块的基本行为和语义,而且具备很强的扩展性。ReentrantLock提供了公平锁和非公平锁两种实现,在默认情况下构造的ReentrantLock实例是非公平锁,可以在创建ReentrantLock实例的时候通过指定公平策略参数来指定是使用公平锁还是非公平锁。本篇将基于JDK7深入源码解析非公平锁的实现原理。
JavaQ
2018/10/23
5030
ReentrantLock与AQS
AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是 Java 并发包的基础工具类,是实现 ReentrantLock、CountDownLatch、Semaphore、FutureTask 等类的基础。
leobhao
2022/06/28
1880
ReentrantLock与AQS
面试官:从源码角度讲讲ReentrantLock及队列同步器(AQS)
JDK 中独占锁(排他锁)的实现除了使用关键字 synchronized 外,还可以使用ReentrantLock。虽然在性能上 ReentrantLock 和 synchronized 没有什么大区别,但 ReentrantLock 相比 synchronized 而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。
业余草
2021/12/06
3710
面试官:从源码角度讲讲ReentrantLock及队列同步器(AQS)
ReentranLock及源码解析(学思想,一步一步点进源码)
我们知道在并发的场景下,如果同时对共享代码块进行访问时,会导致原子性、有序性、可见性问题。从而导致我业务出错。所以有时候,我们有些代码块不能进行并行,就得去改成串行!!之前我们已经知道了一个Synchronized重量级锁。该锁底层是JVM里面,通过monitor锁来实现串行,其他线程进行等待。
向着百万年薪努力的小赵
2022/12/02
2550
ReentranLock及源码解析(学思想,一步一步点进源码)
AQS源码分析之ReentrantLock
在该方法内部会调用非公平锁java.util.concurrent.locks.ReentrantLock.NonfairSync#tryAcquire和 acquireQueued和addWaiter方法,这些方法会在后面进行分析。
山行AI
2020/03/25
3780
快速掌握并发编程---细说ReentrantLock和AQS
面试时常会被问synchronized和ReentrantLock的区别,我们前面文章中已经讲过synchronized同步锁关键字的相关知识点,今天就来聊聊ReentrantLock。ReentrantLock是java.util.concurrent(简称JUC)下使用频率相当高的工具类。
田维常
2020/11/03
4240
快速掌握并发编程---细说ReentrantLock和AQS
ReentrantLock 与 AQS 源码分析
ReentrantLock 与 AQS 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在 github 上提供JDK1.8 的源码、详细的注释及测试用例。欢迎大家 star、fork ! 2. 由于个人水平有限,对源码的分析理解可能存在偏差或不透彻的地方还请大家在评论区指出,谢谢! 1. 基本结构    重入锁 ReetrantLock,JDK 1.5新增的类,作用与synchronized关键字相当,但比sy
lwen
2018/04/11
8460
ReentrantLock 与 AQS 源码分析
Synchronized 和 Lock 锁在JVM中的实现原理以及代码解析
synrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非null对象作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁;当synchronized作用于某一个对象实例时,锁住的便是对应的代码块。在HotSpot JVM实现中,锁有个专门的名字:对象监视器。
小勇DW3
2018/08/30
2.1K4
Synchronized 和 Lock 锁在JVM中的实现原理以及代码解析
Java - ReentrantLock实现细节
话不多说,下面通过流程图及源码介绍ReentrantLock的实现细节。 先看下逻辑流程图,总体统揽:
夹胡碰
2020/12/25
3630
ReentrantLock
ReentrantLock是 java提供代码层面的锁,和synchronized关键字相同。为什么在用提供了 synchronized关键字后,还提供了ReentrantLock等代码层面的锁API,首先在synchronized关键字刚推出是,性能方面差很多,直到后面的版本中推出了锁升级的概念,在性能上有所好转。更重要的也是,JUC的包里面,提供的API更加灵活,符合生产环境各种需求。
虞大大
2020/08/26
6890
ReentrantLock
ReentrantLock是如何基于AQS实现的
ReentrantLock是一个可重入的互斥锁,基于AQS实现,它具有与使用 synchronized 方法和语句相同的一些基本行为和语义,但功能更强大。
本人秃顶程序员
2019/04/24
4880
ReentrantLock是如何基于AQS实现的
从ReentrantLock的实现看AQS的原理及应用
AQS作为JUC中构建锁或者其他同步组件的基础框架,应用范围十分广泛,这篇文章会带着大家从可重入锁一点点揭开AQS的神秘面纱。
美团技术团队
2019/12/10
1.7K2
从ReentrantLock的实现看AQS的原理及应用
ReentrantLock源码解析
谈到多线程,就不避开锁(Lock),jdk中已经为我们提供了好几种锁的实现,已经足以满足我们大部分的需求了,今天我们就来看下最常用的ReentrantLock的实现。 其实最开始是想写一篇关于StampedLock的源码分析的,但发现写StampedLock前避不开ReentrantReadWriteLock,写ReentrantReadWriteLock又避不开ReentrantLock,他们仨是逐层递进的关系。ReentrantReadWriteLock解决了一些ReentrantLock无法解决的问题,StampedLock又弥补了ReentrantReadWriteLock的一些不足,三者有各自的设计和有缺点,这篇文章先和你一起看下ReentrantLock,之后我们会再一起去了解ReentrantReadWriteLock和StampedLock,相信有了ReentrantLock的基础后面的内容也会容易理解很多。
xindoo
2021/01/22
3600
ReentrantLock源码解析
不能再被问住了!ReentrantLock 源码、画图一起看一看!
" 在阅读完 JUC 包下的 AQS 源码之后,其中有很多疑问,最大的疑问就是 state 究竟是什么含义?并且 AQS 主要定义了队列的出入,但是获取资源、释放资源都是交给子类实现的,那子类是怎么实现的呢?下面开始了解 ReentrantLock。 "
程序员小航
2020/11/23
3420
不能再被问住了!ReentrantLock 源码、画图一起看一看!
ReentrantLock
CAS是一种无锁算法。有3个操作数:内存值V、旧的预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
hhss
2021/02/12
4550
ReentrantLock
并发编程之深入理解ReentrantLock和AQS原理
AQS(AbstractQueuedSynchronizer)在并发编程中占有很重要的地位,可能很多人在平时的开发中并没有看到过它的身影,但是当我们有看过concurrent包一些JDK并发编程的源码的时候,就会发现很多地方都使用了AQS,今天我们一起来学习一下AQS的原理,本文会用通俗易懂的语言描述AQS的原理。当然如果你了解CAS操作、队列、那么我相信你学习起来会感到无比轻松。
全栈程序员站长
2021/08/05
3080
ReentrantLock 源码浅析
ReentrantLock 介绍 一个可重入的互斥锁,它具有与使用{synchronized}方法和语句访问的隐式监视器锁相同的基本行为和语义,但它具有可扩展的能力。 一个ReentrantLock会被最后一次成功锁定(lock)的线程拥有,在还没解锁(unlock)之前。当锁没有被其他线程拥有的话,一个线程执行『lock』方法将会返回,获取锁成功。一个方法将会立即的返回,如果当前线程已经拥有了这个锁。可以使用『isHeldByCurrentThread』和『getHoldCount』来检查当前线程是否持有
tomas家的小拨浪鼓
2018/06/27
1.8K1
从源码来看ReentrantLock和ReentrantReadWriteLock ReentrantLockReentrantReadWriteLock
上一篇花了点时间将同步器看了一下,心中对锁的概念更加明确了一点,知道我们所使用到的锁是怎么样获取同步状态的,我们也写了一个自定义同步组件Mutex,讲到了它其实就是一个简版的ReentrantLock,本篇文章我们就来看看ReentrantLock底层是怎么样的! 目录结构: ReentrantLock 公平锁与非公平锁 ReentrantReadWriteLock ---- ReentrantLock ReentrantLock我们叫做可重入锁,也就是我们可以重复进入的意思,也就是表示,一个线程可以对指定
MindMrWang
2018/04/16
7710
从源码来看ReentrantLock和ReentrantReadWriteLock	ReentrantLockReentrantReadWriteLock
死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁
Reentrant = Re + entrant,Re是重复、又、再的意思,entrant是enter的名词或者形容词形式,翻译为进入者或者可进入的,所以Reentrant翻译为可重复进入的、可再次进入的,因此ReentrantLock翻译为重入锁或者再入锁。
彤哥
2019/07/08
5330
死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁
相关推荐
带你学习 ReentrantLock
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档