什么是PHPUnit?在PHP项目中怎么使用?下面本篇文章给大家介绍一下在PHP项目中使用PHPUnit框架进行单元测试的方法,希望对大家有所帮助!
镜像地址 : PHPUnit简介以及如何在项目中使用 - 多厘(https://wulicode.com/php/vendor/phpunit-at-project/index.html)
官方文档:https://phpunit.readthedocs.io/zh_CN/latest/
单元测试介绍
单元测试是分别对程序的单元(方法, 函数)进行测试,判断执行结果是否符合预期
单元测试能协助开发者什么?
1.确保单元的执行结果
2.尽早发现程序中的错误
3.修改程序, 更加有信心
PHPUnit
PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,PHPUnit 是参考 xUnit 架构利用 PHP 实作出来。
安装PHPUnit
# 项目中安装 $ composer require --dev phpunit/phpunit # 下载到本地 $ wget https://phar.phpunit.de/phpunit-9.phar
使用项目中安装可以在项目中直接运行, 无需太多配置, 将 phar 下载到非项目文件夹, 可以减少项目代码的体积, 我一般采用下载到本地, 然后多个项目公用一个 phpunit.phar
, 减少项目体积, 不过需要在 IDE中增加更多配置
配置autoload
添加下面的代码到composer.json PackageName是项目的名称,src是包含PHP class文件的文件夹地址,项目根目录下的子文件夹。
... "autoload": { "psr-4": { "PackageName\\": "src/", "PackageName\\Tests": "tests/" } }, ...
设置PHPUnit
在phpstorm中 Languages & Frameworks >PHP >Test Frameworks
根据不同的加载方式设置不同的配置
如果是项目额外加载, 则需要把 phpunit 所在的文件夹作为 library 加入项目, 便于代码提示 Preferences | Languages & Frameworks | PHP
, 加入 phpunit 文件夹
编写PHPUnit测试
针对类
Example
的测试写在类ExampleTest
中,ExampleTest
继承自TestCase
对于方法的测试命名为
test*
的公用方法在测试方法内,类似于
assertEquals()
的断言方法用来对实际值和预期值的匹配做出验证
ArrayTest 用 PHPUnit 测试数组操作
<?php use PHPUnit\Framework\TestCase; class ArrayTest extends TestCase { public function testPushAndPop() { $stack = []; $this->assertCount(0, $stack); $stack[] = 'foo'; $this->assertEquals('foo', $stack[count($stack) - 1]); $this->assertCount(1, $stack); $this->assertEquals('foo', array_pop($stack)); $this->assertCount(0, $stack); } }
在 IDE 中运行
- 点击方法名称
- 右键测试类
- 右键测试文件夹
PHPUnit 断言
laravel 中除了标准的 PHPUnit 断言(assertEquals()
, assertContains()
, assertInstanceOf()
, …更多断言请看https://phpunit.readthedocs.io/zh_CN/latest/assertions.html?highlight=assertTrue#
)之外, 还存在很多允许测试 web 应用的检测项目
assertPageLoaded($uri, $message = null)
检测最近的页面是否被加载, 如果不存在 url / message 时候会报错
assertResponseOk()
是否页面相应OK
assertReponseStatus($code)
是否响应指定的code
assertViewHas($key, $value = null)
视图中是否存在指定的数据
assertViewHasAll($bindings)
视图中是否存在指定的一系列数据
assertViewMissing($key)
指定视图中是否不存在这个数据
assertRedirectedTo($uri, $with = [])
检测是否重定向到指定的uri
assertRedirectedToRoute($name, $parameters = [], $with = [])
是否客户端重定向到指定的路由
assertRedirectedToAction($name, $parameters = [], $with = [])
是否重定向到 action
assertSessionHas($key, $value = null)
session 中是否存在 key/ value
assertSessionHasAll($bindings)
session 中是否存在指定的 kv
assertSessionHasErrors($bindings = [])
session 是否存在错误
assertHasOldInput()
session 中是否存在以前的数据
示例 xml 文件
phpunit.xml at 9.x · laravel
https://github.com/laravel/laravel/blob/9.x/phpunit.xml
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true"> <testsuites> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> </testsuites> <coverage processUncoveredFiles="true"> <include> <directory suffix=".php">./app</directory> </include> </coverage> <php> <env name="APP_ENV" value="testing"/> <env name="BCRYPT_ROUNDS" value="4"/> <env name="CACHE_DRIVER" value="array"/> <!-- <env name="DB_CONNECTION" value="sqlite"/> --> <!-- <env name="DB_DATABASE" value=":memory:"/> --> <env name="MAIL_MAILER" value="array"/> <env name="QUEUE_CONNECTION" value="sync"/> <env name="SESSION_DRIVER" value="array"/> <env name="TELESCOPE_ENABLED" value="false"/> </php> </phpunit>
Php 的单元覆盖率
安装 xdebug / Phpunit
# 安装 xdebug $ pecl install xdebug
启用 xdebug
# php.ini 文件 xdebug.mode = coverage
推荐学习:《PHP视频教程》
The above is the detailed content of What is PHPUnit? How to use it in PHP project?. For more information, please follow other related articles on the PHP Chinese website!

TooptimizePHPcodeforreducedmemoryusageandexecutiontime,followthesesteps:1)Usereferencesinsteadofcopyinglargedatastructurestoreducememoryconsumption.2)LeveragePHP'sbuilt-infunctionslikearray_mapforfasterexecution.3)Implementcachingmechanisms,suchasAPC

PHPisusedforsendingemailsduetoitsintegrationwithservermailservicesandexternalSMTPproviders,automatingnotificationsandmarketingcampaigns.1)SetupyourPHPenvironmentwithawebserverandPHP,ensuringthemailfunctionisenabled.2)UseabasicscriptwithPHP'smailfunct

The best way to send emails is to use the PHPMailer library. 1) Using the mail() function is simple but unreliable, which may cause emails to enter spam or cannot be delivered. 2) PHPMailer provides better control and reliability, and supports HTML mail, attachments and SMTP authentication. 3) Make sure SMTP settings are configured correctly and encryption (such as STARTTLS or SSL/TLS) is used to enhance security. 4) For large amounts of emails, consider using a mail queue system to optimize performance.

CustomheadersandadvancedfeaturesinPHPemailenhancefunctionalityandreliability.1)Customheadersaddmetadatafortrackingandcategorization.2)HTMLemailsallowformattingandinteractivity.3)AttachmentscanbesentusinglibrarieslikePHPMailer.4)SMTPauthenticationimpr

Sending mail using PHP and SMTP can be achieved through the PHPMailer library. 1) Install and configure PHPMailer, 2) Set SMTP server details, 3) Define the email content, 4) Send emails and handle errors. Use this method to ensure the reliability and security of emails.

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

The reason for using Dependency Injection (DI) is that it promotes loose coupling, testability, and maintainability of the code. 1) Use constructor to inject dependencies, 2) Avoid using service locators, 3) Use dependency injection containers to manage dependencies, 4) Improve testability through injecting dependencies, 5) Avoid over-injection dependencies, 6) Consider the impact of DI on performance.

PHPperformancetuningiscrucialbecauseitenhancesspeedandefficiency,whicharevitalforwebapplications.1)CachingwithAPCureducesdatabaseloadandimprovesresponsetimes.2)Optimizingdatabasequeriesbyselectingnecessarycolumnsandusingindexingspeedsupdataretrieval.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

WebStorm Mac version
Useful JavaScript development tools

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Dreamweaver CS6
Visual web development tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.
