如何正确在PHP项目中应用PHPUnit进行单元测试?

更新于
2026-09-30 11:36:34
1阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1698个文字,预计阅读时间需要7分钟。

如何正确在PHP项目中应用PHPUnit进行单元测试?

什么是PHPUnit?PHPUnit是一个流行的PHP单元测试框架,用于自动化测试PHP代码。它可以帮助开发者确保代码质量,提高代码的可维护性和可靠性。

在PHP项目中如何使用?下面本章节将为大家介绍如何在PHP项目中使用PHPUnit进行单元测试。

使用PHPUnit进行单元测试的方法:

1.安装PHPUnit:首先,您需要在您的开发环境中安装PHPUnit。可以通过Composer来安装:

composer require --dev phpunit/phpunit

2.创建测试文件:为要测试的代码创建一个测试文件,通常以`Test`结尾。例如,如果您的代码文件名为`MyClass.php`,则测试文件可以命名为`MyClassTest.php`。

3.编写测试用例:在测试文件中,使用PHPUnit提供的断言方法编写测试用例。例如,您可以编写一个测试用例来验证`MyClass`类的`myMethod`方法是否按预期工作:

php use PHPUnit\Framework\TestCase;

class MyClassTest extends TestCase { public function testMyMethod() { $obj=new MyClass(); $result=$obj->myMethod(); $this->assertEquals('期望的结果', $result); } }

4.运行测试:使用命令行运行测试:

phpunit MyClassTest.php

5.分析结果:PHPUnit会输出测试结果,包括通过、失败或错误的信息。

希望对大家有所帮助!

镜像地址:[PHPUnit简介以及如何在项目中使用](https://example.com/phpunit-introduction-and-usage)

什么是PHPUnit?在PHP项目中怎么使用?下面本篇文章给大家介绍一下在PHP项目中使用PHPUnit框架进行单元测试的方法,希望对大家有所帮助!

镜像地址 : PHPUnit简介以及如何在项目中使用 - 多厘(wulicode.com/php/vendor/phpunit-at-project/index.html)

官方文档:phpunit.readthedocs.io/zh_CN/latest/

单元测试介绍

单元测试是分别对程序的单元(方法, 函数)进行测试,判断执行结果是否符合预期

单元测试能协助开发者什么?

1.确保单元的执行结果

2.尽早发现程序中的错误

3.修改程序, 更加有信心

PHPUnit

PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,PHPUnit 是参考 xUnit 架构利用 PHP 实作出来。

安装PHPUnit

# 项目中安装 $ composer require --dev phpunit/phpunit # 下载到本地 $ wget 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(), …更多断言请看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)

如何正确在PHP项目中应用PHPUnit进行单元测试?

指定视图中是否不存在这个数据

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

github.com/laravel/laravel/blob/9.x/phpunit.xml

<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="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视频教程》

以上就是什么是PHPUnit?在PHP项目中怎么使用?的详细内容,更多请关注自由互联其它相关文章!

本文共计1698个文字,预计阅读时间需要7分钟。

如何正确在PHP项目中应用PHPUnit进行单元测试?

什么是PHPUnit?PHPUnit是一个流行的PHP单元测试框架,用于自动化测试PHP代码。它可以帮助开发者确保代码质量,提高代码的可维护性和可靠性。

在PHP项目中如何使用?下面本章节将为大家介绍如何在PHP项目中使用PHPUnit进行单元测试。

使用PHPUnit进行单元测试的方法:

1.安装PHPUnit:首先,您需要在您的开发环境中安装PHPUnit。可以通过Composer来安装:

composer require --dev phpunit/phpunit

2.创建测试文件:为要测试的代码创建一个测试文件,通常以`Test`结尾。例如,如果您的代码文件名为`MyClass.php`,则测试文件可以命名为`MyClassTest.php`。

3.编写测试用例:在测试文件中,使用PHPUnit提供的断言方法编写测试用例。例如,您可以编写一个测试用例来验证`MyClass`类的`myMethod`方法是否按预期工作:

php use PHPUnit\Framework\TestCase;

class MyClassTest extends TestCase { public function testMyMethod() { $obj=new MyClass(); $result=$obj->myMethod(); $this->assertEquals('期望的结果', $result); } }

4.运行测试:使用命令行运行测试:

phpunit MyClassTest.php

5.分析结果:PHPUnit会输出测试结果,包括通过、失败或错误的信息。

希望对大家有所帮助!

镜像地址:[PHPUnit简介以及如何在项目中使用](https://example.com/phpunit-introduction-and-usage)

什么是PHPUnit?在PHP项目中怎么使用?下面本篇文章给大家介绍一下在PHP项目中使用PHPUnit框架进行单元测试的方法,希望对大家有所帮助!

镜像地址 : PHPUnit简介以及如何在项目中使用 - 多厘(wulicode.com/php/vendor/phpunit-at-project/index.html)

官方文档:phpunit.readthedocs.io/zh_CN/latest/

单元测试介绍

单元测试是分别对程序的单元(方法, 函数)进行测试,判断执行结果是否符合预期

单元测试能协助开发者什么?

1.确保单元的执行结果

2.尽早发现程序中的错误

3.修改程序, 更加有信心

PHPUnit

PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,PHPUnit 是参考 xUnit 架构利用 PHP 实作出来。

安装PHPUnit

# 项目中安装 $ composer require --dev phpunit/phpunit # 下载到本地 $ wget 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(), …更多断言请看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)

如何正确在PHP项目中应用PHPUnit进行单元测试?

指定视图中是否不存在这个数据

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

github.com/laravel/laravel/blob/9.x/phpunit.xml

<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="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视频教程》

以上就是什么是PHPUnit?在PHP项目中怎么使用?的详细内容,更多请关注自由互联其它相关文章!