IntelliJ IDEA:使用PHPUnit进行测试
使用PHPUnit进行测试
此功能仅在Ultimate版本中受支持。
IntelliJ IDEA通过与PHPUnit测试框架集成,支持PHP应用程序的单元测试。
开始准备
- 确保已安装并启用了PHP插件。该插件未与IntelliJ IDEA捆绑在一起,但可以从JetBrains插件存储库中安装。
- 确保在PHP页面上的IntelliJ IDEA中配置了PHP解释器,如配置本地PHP解释器和配置远程PHP解释器中所述。
下载并安装PHPUnit
在开始之前,请确保您的计算机上已安装了“Composer”,并按照“Composer依赖关系管理器”中所述在当前项目中进行Composer的初始化。
提示:Composer 是 PHP5.3以上 的一个依赖管理工具。它允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管理器。
手动下载并安装phpunit.phar
从PHPUnit官方网站下载phpunit.phar并将其保存在您的计算机上:
除了能够运行PHPUnit测试之外,如果你还需要完整的编码帮助,请将phpunit.phar存储在项目的根目录下,稍后PHPUnit将会使用到。
如果您只需要运行PHPUnit测试,并且不需要任何编码帮助,则可以将phpunit.phar保存在项目之外。
使用Composer下载并安装phpunit.phar
从composer.json的上下文菜单中,选择:Composer|管理依赖关系。或者从主菜单选择:工具|Composer|管理依赖项。
在 打开的“管理Composer依赖关系”对话框中,从“可选包”列表中选择
phpunit/phpunit
包,可以使用搜索字段。从要安装的版本列表中选择相关版本。
如有必要,请展开“设置隐藏”区域并指定高级安装选项。在“命令行参数”字段中,键入其他命令行参数。建议提供
--dev
:选项:在这种情况下,包将添加到composer.json文件的require-dev
部分而不是默认的require
部分。单击“安装”。
将PHPUnit与IntelliJ IDEA项目集成
如果您使用本地PHP解释器,IntelliJ IDEA会自动执行初始PHPUnit配置。
自动配置PHPUnit
将phpunit.xml或phpunit.xml.dist配置文件存储在项目根目录下。
使用Composer安装PHPUnit。
IntelliJ IDEA将在“测试框架”页面和PHPUnit运行/调试配置上创建本地框架配置。
您可以手动配置PHPUnit。如果使用远程PHP解释器,则需要手动配置。
手动配置PHPUnit
在“设置/首选项”对话框(Ctrl+Alt+S)中,展开“语言和框架”节点,然后选择“PHP下的测试框架”。
在打开的“测试框架”页面上,单击中央窗格的,然后从列表中选择配置类型:
在本地配置中,使用默认项目PHP解释器。
要将PHPUnit与远程PHP解释器一起使用,请在打开的对话框中选择一个配置:
在右侧窗格中,选择PHPUnit库安装类型:
要使用Composer自动加载器,请在vendor文件夹中指定autoload.php文件的路径。
要从phpunit.phar运行PHPUnit ,请下载phpunit.phar,将存档保存在项目根文件夹中,并指定它的路径。
单击时,IntelliJ IDEA会检测并显示PHPUnit版本。
要从PEAR运行PHPUnit,请将PEAR配置为包含路径。
安装过程取决于您使用的操作系统和系统设置。
在“测试运行程序”区域中,指定用于启动和执行方案的配置XML文件。
默认情况下,PHPUnit在项目根文件夹或config文件夹中查找phpunit.xml配置文件。您可以指定自定义配置文件。您还可以键入引导程序文件的路径,以便在启动测试之前始终执行PHP脚本。在该字段中,指定脚本的位置。手动键入路径,或单击并在打开的对话框中选择所需的文件夹。
为类生成PHPUnit测试
执行以下任一操作以打开“创建新的PHP测试”对话框:
在主菜单上,选择:文件|新建。然后,从上下文菜单上选择:PHP测试|PHPUnit测试。
在“项目”工具窗口中,按Alt+Insert或右键单击要测试的PHP类,然后选择:新建|PHP测试|PHPUnit测试。
在要测试的PHP类的编辑器中,将插入符号放置在类的定义中。然后,从上下文菜单中选择:转到|进行测试,或按Ctrl+Shift+T,然后从弹出菜单中选择“创建新测试”。这样,您就可以为单个PHP文件中的多个类中定义的PHP类生成测试。
要为某个特定的方法创建测试,请将插入符号放在方法声明中。将在“创建新的PHP测试”对话框的“生成测试方法”区域中自动选择所选方法。
将打开“创建新的PHP测试”对话框。
提供生成的测试的参数:
测试文件模板,即IntelliJ IDEA将基于其生成测试类的模板。确保在“测试文件模板”列表中选择了PHPunit。
要测试的类的完全限定名称,此名称将用于建议测试类名称。默认情况下,“名称”框显示调用测试生成的类的名称。要使用完成,请按Ctrl+Space。
测试类的名称。IntelliJ IDEA自动将生产类名称中的名称组合为<production class="">test. php。测试类名称显示在“测试类”区域的“名称”字段中。
测试类的文件夹。默认情况下,它是标记为测试源根目录的文件夹。如果未指定此类文件夹,则建议使用包含生产类的文件夹。
要指定其他文件夹,请单击“目录”字段旁边的 ,然后选择相关文件夹。
用于生成测试方法存根的生产类方法。在“为区域生成测试方法”中,选中所需生产类方法旁边的复选框。要包含父类中的继承方法,请选中“显示继承的方法”复选框。
IntelliJ IDEA会自动将测试方法的名称组成
test<production method>
。您可以在“文件和代码模板”设置页面的“代码”选项卡上自定义用于生成测试方法存根的代码模板。
检查,接受或更新预定义设置,然后单击“确定”以启动测试生成。
测试准备就绪后,您可以通过选择:导航|转到测试主题,以导航回生产类。
生成PHPUnit测试方法
在编辑器中打开所需的测试类,并将插入符放置在类定义中的任何位置。
在上下文菜单中选择“生成”或按Alt+Insert。然后从“生成”列表中选择“测试方法”。
设置测试夹具,即为测试开始前模拟所需环境的代码生成存根,并在测试结束后返回原始环境:
在上下文菜单中选择“生成”或按Alt+Insert。然后从“生成”列表中选择“设置方法”或“拆卸方法”。
您可以在“设置/首选项”对话框(Ctrl+Alt+S)的"文件和代码模板" 页上自定义用于生成 PHPUnit 测试方法的代码模板。要快速访问此页面,请在“生成”列表中,从方法的子菜单中选择“编辑模板”。
运行和调试PHPUnit测试
您可以运行和调试单个测试以及整个文件和文件夹中的测试。IntelliJ IDEA使用默认设置创建运行/调试配置,并启动测试。您可以稍后保存此配置以供进一步重复使用。
运行或调试PHPUnit测试操作步骤
在“项目”工具窗口中,选择要运行测试的文件或文件夹,然后从选择的上下文菜单中选择:Run '<file or folder>' 或:Debug '<file or folder>':
IntelliJ IDEA生成默认运行配置并使用它启动运行/调试测试会话。
运行或调试单个测试
在编辑器中打开测试文件,右键单击测试的调用,然后从上下文菜单中选择,Run'<test_name>' 或,Debug'<test_name>'。
运行一系列测试
在编辑器中打开目标文件,右键单击所需的测试目标,即正在测试的类或方法,然后选择:转到|测试,或按Ctrl+Shift+T。
从弹出菜单中,选择要执行的测试。对于多个选择,使用Ctrl(⌘用于macOS)和Shift键。
按下Ctrl+Shift+F10以运行测试选择。
测试会话结束后,IntelliJ IDEA会自动创建运行/调试配置,并将其测试范围设置为Composite。
保存自动生成的默认配置
测试会话结束后,从文件或文件夹的上下文菜单中选择:Save <default_test_configuration_name>。
通过先前保存的运行/调试配置运行或调试测试
从工具栏上的列表中选择所需的PHPUnit配置,然后单击或。
创建自定义运行/调试配置
在“项目”工具窗口中,选择要运行测试的文件或文件夹,然后从上下文菜单中选择“创建运行配置 ”。或者,在主菜单上选择:运行|编辑配置,然后单击并从列表中选择PHPUnit。
在打开的“运行/调试配置:PHPUnit”对话框中,通过指定要传递给PHP可执行文件的选项和参数,指定要运行的方案并自定义当前PHP解释器的行为。
监控测试结果
IntelliJ IDEA在“运行工具”窗口的“测试运行器”选项卡中显示测试执行结果。
该标签分为两个主要区域:
- 左侧区域允许您深入查看所有单元测试以查看成功和失败的单元测试。您可以过滤测试,导出结果,并使用上下文菜单命令来运行特定测试或导航到源代码。
- 右侧区域显示原始PHPUnit输出。
自动运行PHPUnit测试
当受影响的代码发生更改时,您可以自动重新运行IntelliJ IDEA测试。此选项根据运行/调试配置进行配置,可以应用于测试,测试文件,文件夹或复合选择的测试,具体取决于此运行/调试配置中指定的测试范围。
自动配置重新运行测试的操作步骤如下所示:
运行测试。
在“测试运行程序”选项卡上,按下工具栏上的切换按钮:
(可选)单击按钮并设置在代码更改时启动测试的时间延迟: