前提说明:

symfony 版本 4.1.*,使用  composer create-project symfony/website-skeleton  进行安装。

目标:在一个单元测试用例中对当前工程中的接口进行测试。使用PHPUnit。

坑1(发送请求使用 browser-kit):

browser-kit 只能对当前的应用进行发送接口请求,而且请求是不经过 index.php 的。

这样导致的问题就是如果当前的应用都是按照官方的指导配置去配置的话,比如数据库连接配置在 .env 中,那么如果请求不经过 index.php 的话,就无法加载 .env 文件。解决方法就是将数据库连接配置在 config/packages/doctrine.yaml 文件中。好了,现在数据库的连接问题解决了。

新的问题又来了,你在项目路径下的 tests 文件夹中创建了一个测试文件,比如 HomeTest.php,那么该继承哪个基类呢?正确答案是这个 Symfony\Bundle\FrameworkBundle\Test\WebTestCase,同时还需要指定 client 需要启动哪个 kernel,文档上说要指定kernel 的话需要复写 Symfony\Bundle\FrameworkBundle\Test\KernelTestCase 这个类中的 getKernelClass 或 createKernel 方法,好了现在你已经在 HomeTest.php 中复写了 getKernelClass 方法,并且指定了返回你自己的 kernel,该如何进行调用呢?这里需要用到,后期静态绑定这个知识点了。正确答案是使用 self 进行调用。

可以使用 xdebug 进行调试,因为是在同一个进程中。

坑2(发送请求使用 curl):

比如使用 GuzzleHttp,这样发送出去的请求是一个真正的 http 请求,因此会完整的按照 http 请求方式去执行,如同一个真正的请求发过来。

这样是会经过 index.php 的,无需将数据库配置在 config/packages/doctrine.yaml 中。

但是,这样的话由于不是当前的进程,那么如果想使用 xdebug 是不可能的,因为 xdebug 一旦开启监听就会阻塞所有的 php-fpm 进程。

Symfony4框架中单元测试和接口测试中的一些小坑的更多相关文章

  1. python nose测试框架全面介绍八---接口测试中非法参数的断言

    在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容 通常做法为发请求,将错误的返回结果拿出,再进行对比匹配:但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用 ...

  2. 单元测试在Unity中的应用

    项目描述:简单演示单元测试在Unity中的应用 项目地址:UnityTestRunner_Tutorial - SouthBegonia 项目版本:2020.3.20f1 项目用法:打开就用,代码都放 ...

  3. .NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和使用

    在我们开发的很多分布式项目里面(如基于WCF服务.Web API服务方式),由于数据提供涉及到数据库的相关操作,如果客户端的并发数量超过一定的数量,那么数据库的请求处理则以爆发式增长,如果数据库服务器 ...

  4. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  5. HttpClient在HTTP协议接口测试中的使用

    TTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提交请求与RAW请求,下面我将结合HttpClient来实现一下这三种形式: 一.GET请求: GET请 ...

  6. [转]框架模式 MVC 在Android中的使用

    算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学), ...

  7. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  8. 框架模式 MVC 在Android中的使用

    算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学), ...

  9. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

随机推荐

  1. typedef void (*funcptr)(void)的含义

    fun a;//等价于void (*a)(); 这样声明起来就方便多了 void (*a)();表示a是个指针,指向一个不带参数.返回值为空的函数 定义一个函数指针类型. 比如你有三个函数: void ...

  2. SSH工具--FinalShell

    FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿 ...

  3. 重写equals为啥需要重写hashCode

    描述 以前一直记得重写equals要把hashCode也要重写了,但是一直也是没有搞明白, 最近在看一些东西,觉得有必要记录一下. 了解一下equals equals是Object类的方法, equa ...

  4. 【sed】基本用法

    1. 文本处理 sed编辑器根据sed命令处理数据流中的数据:在流编辑器将所有命令与一行数据匹配完后,它会读取下一行数据并重复以下过程: (1) 一次从输入中读取一行数据 (2) 根据所提供的编辑器命 ...

  5. Qt 串口通信 高速发送出错的解决方法总结

    使用网上的qextserialport-1.2类,自行开发多线程串口通信.开发的过程中,出现两个问题:   问题1:我用信号槽跨线程调用串口类MyCom 发送和接收数据,中间运行的时候,会内存错误,Q ...

  6. MySQL 中<=>用法(长知识)

    https://www.runoob.com/mysql/mysql-operator.html MySQL 运算符 本章节我们主要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下 ...

  7. android data binding jetpack VII @BindingAdapter

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  8. C#Application:Exit与ExitThread 解释

    Application.Exit(); 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口 Application.ExitThread 方法 退出当前线程上的消息循环,并关闭该线程上的 ...

  9. linux备忘和卸载

    linux上网 -------------------------------------------------linux卸载------------------------------------ ...

  10. docker数据管理(2)

    一.docker存储资源类型 docker两种存储资源类型 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉 ...