以前用测试接口就是用PostMan + PHPStorm + Xdebug 进行调试,具体就是配置好PHPStorm+
Xdebug后,用PostMan发送请求时,增加参数:XDEBUG_SESSION_START=PHPSTORM。如下图:

PostMan+Xdebug的方式测试基本也可以了,但是测试粒度还是有点大,每次测试都要正儿八经用
postman发一次请求来验证结果,稍显麻烦。
现在新公司用的框架是Yii2.0框架,看文档时发现Yii2.0框架集成了Codeception单元测试,最早的时
候网上查PHP单元测试,很多大神说PHP开发基本没人用单元测试,于是也就没去了解,所以一直就是用
Postman测试,自己也在网上出于好奇心也看看PHP单元测试的教程,大都是简单的Assert.equel或者
是Assert.isEmpty这种判断是否等于结果值或者是否等于空的举例而已,感觉没什么意意,也就放弃了,
直到前天正儿八经的去想着单元测试能否把结果打印出来,而不是简单断言,于是就去研究Yii2集成的
Codeception单元测试框架,但是无论是官网上文档还是网上网友的帖子都是简单介绍,没有我期望的内
容,没办法只能埋头苦干,于是得货了,分享出来,希望跟我一样菜的需要“工欲善必先利其器”的菜鸟们
能得到帮助。
先用Composer安装Codeception,Yii2官网有介绍,安装后如下图:

安装好之后,当然配置Codeception方式执行测试了,如下图:

为PHPStorm配置Codeception,如下图:

这我写的一个接口需要调用的方法,里面是用Yii2框架的HttpClient发送http请求获取携程的Token,
现在我想对我这个方法进行测试,而不是把调用这个方法的接口写好再用PostMan来测试。先在要测试
的方法所在类的类名处右键,new一个单元测试类,选Codeception,选择测试的方法,如下图:


会在Tests 目录下的unit目录生成对象的测试类,类名以要测试的类加后缀“Test”结尾。如下图

我在测试方法里打个断点,如图

在测试类的测试方法左上角有个绿色三角形按钮,点击,选择用Codeception测试。如图:

点击测试后,会运行到刚刚打断点的地方,接下去就可以从容的单步单元测试调试了。

我最初本来尝试测试的时候用Yii2日志功能写日志,后面发现始终没有去写日志,也是偶然发现可以用Xdebug单步调试,经过单步调试,Codecetion调用的Logger类是它自己的,虽然我配置了Yii2框架的Log组件,如图:

经过Xdebug的单步调试,通过Codeception单元测试,发现调用Yii2的Log最终调用的是Codeception包里的一个Debug类,如下图,注意看类的注释说明,写明了此类会在--debug模式下起作用(红框里英文注释)。

用命令行的方式执行单元测试,加上--debug选项,会直接打印出想要用Yii2写日志文件的内容。如下图:


本来边研究的时候就应该记录,无奈今天和老婆吵架心烦意乱突然想起要开始尝试着去分享东西了,这才想
起把前两天自己的成果分享出来,图片和素材都是临时操作截图补的,还有这个是结合Yii2的单元测试而已,
其他框架的应该也类似,感觉写东西还蛮有意思的,虽然要花不少时间,第一次写东西。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。