玩转 PhpStorm 系列(十二):基于 PHPUnit 进行单元测试


PHP 生态有很多测试框架,其中最流行的当属 PHPUnit,我们还是以 Laravel 项目为例,在 PhpStorm 中演示如何通过 PHPUnit 对 PHP 项目进行单元测试。

对指定目录、类、方法运行测试

Laravel 自带的测试演示类位于项目根目录下的 tests 子目录中。在 PhpStorm 中,该目录会被自动标记为绿色,表示是测试目录:

-w545

在 PhpStorm 中基于 PHPUnit 进行单元测试很简单,PhpStorm 已经内置了通过本地 PHPUnit 运行测试用例的支持(Laravel 项目初始化的时候已经安装了 phpunit 依赖,PhpStorm 会基于这个 phpunit 对项目进行单元测试),无需额外配置,只需要选中待测试目录、文件、方法,然后在右键下拉菜单选择 Run Test 即可(前提是先要编写好对应的测试用例代码):

-w667

测试结果会显示在 PhpStorm 下方的 Run 窗口中:

-w815

如果你的 PhpStorm 版本较老,不能自动识别 PHPUnit 并创建对应的测试框架配置,可以在 Preferences | Languages & Frameworks | PHP | Test Frameworks 界面(Windows 系统请将 Preferences 替换成 Settings)手动创建,创建的时候选择 PHPUnit Local,然后再:

-w1169

脚本路径映射到当前项目根目录下的 vendor/autoload.php,配置文件映射到当前项目根目录下的 phpunit.xml

如果你想要使用其他测试框架(Behat、PHPSpec、Codeception等),也是在这里创建对应的测试框架配置:

-w374

要对指定文件进行测试,还可以在打开该文件的代码编辑区域任意位置右键,选择运行该文件的测试代码:

-w696

或者在声明该测试类所在行的左侧点击绿色的运行测试图标进行测试:

-w577

对于指定方法的测试也可以这么做:

-w592

测试成功,运行结果是绿色提示,测试失败,则是红色提示:

-w1019

并且会标识出错的原因和位置,方便排查。

PHPUnit 代码覆盖率分析

在上面运行测试用例的时候,细心的同学可能已经看到在下拉菜单中除了运行测试的选项外,还有一个包含覆盖率的测试选项:

-w614

PHPUnit 的代码覆盖率分析使用了 PHP_CodeCoverage 这个组件,而这个组件又使用了 PHP Xdebug 扩展所提供的代码覆盖率功能,所以要使用代码覆盖率功能,需要先安装 Xdebug 扩展,如果系统没有安装该扩展,可以参考前面安装配置 Xdebug 扩展的教程进行安装和设置。

为了告诉 PHPUnit 哪些源代码文件要包含在代码覆盖率报告中,必须配置白名单。Laravel 自带的 phpunit.xml(位于项目根目录下)中已经包含了这个配置:

<filter>
    <whitelist processUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">./app</directory>
    </whitelist>
</filter>

上述配置表明 app 目录下的所有后缀为 .php 的 PHP 代码都会包含到代码覆盖率报告中,即使某些文件没有被测试用例覆盖到,同时还可以知道未被覆盖文件中有哪些行是可执行的,另外,你还可以配置跳过哪些代码块,更多设置细节请参考 PHPUnit 官方文档

我们在 tests 目录上运行包含代码覆盖率的测试,运行完成后,PhpStorm 右侧区域会弹出包含本次测试代码覆盖率分析的窗口:

-w1353

点击 app 目录进去,可以看到所有子目录的代码覆盖率情况:

-w600

另外,我们点击左侧 Project 区域,展开项目目录结构树,也可以看到测试代码覆盖率:

-w1152

而在代码编辑区,可以看到被覆盖的代码左侧有绿色长条,未被覆盖到的代码左侧是红色长条。

小结

以上就是在 PhpStorm 中通过 PHPUnit 进行单元测试的简单示例,至此,我们的玩转 PhpStorm 系列教程也要告一段落了,希望通过这些教程的学习,可以帮助你更好地使用 PhpStorm 这个代码编辑器,从而提高日常的编码、调试、测试效率,少加班,多涨薪,Code Happy!


点赞 取消点赞 收藏 取消收藏

<< 上一篇: 玩转 PhpStorm 系列(十一):使用 PHP CS Fixer 统一团队编码风格

>> 下一篇: 没有下一篇了