🗣 Wd提问: phpunit教程
🤖 Ai回答: PHPUnit 教程
PHPUnit 是 PHP 最流行的单元测试框架之一,本教程将带你从基础到进阶学习 PHPUnit。
1、安装 PHPUnit
使用 Composer 安装 PHPUnit:
bash
composer require dev phpunit/phpunit
2、基本测试结构
2.1 创建测试类
测试类通常继承 `PHPUnit\Framework\TestCase` 并包含以 `test` 开头的方法。
php
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase
{
public function testAdd()
{
$calculator = new Calculator();
$result = $calculator-add(2, 3);
$this-assertEquals(5, $result);
}
}
2.2 断言方法
PHPUnit 提供了多种断言方法:
`assertEquals($expected, $actual)` 检查两个值是否相等
`assertTrue($condition)` 检查条件是否为 true
`assertFalse($condition)` 检查条件是否为 false
`assertNull($variable)` 检查变量是否为 null
`assertContains($needle, $haystack)` 检查元素是否在数组中
`assertCount($expectedCount, $array)` 检查数组元素数量
`assertInstanceOf($expected, $actual)` 检查对象是否为某类的实例
3、测试生命周期方法
php
class DatabaseTest extends TestCase
{
// 在测试类开始时运行一次
public static function setUpBeforeClass(): void
{
// 初始化数据库连接等
}
// 在每个测试方法前运行
protected function setUp(): void
{
// 重置测试状态
}
// 测试方法
public function testSomething()
{
// 测试代码
}
// 在每个测试方法后运行
protected function tearDown(): void
{
// 清理资源
}
// 在测试类结束时运行一次
public static function tearDownAfterClass(): void
{
// 关闭数据库连接等
}
}
4、数据提供器
使用数据提供器可以多次运行同一测试方法,但传入不同参数:
php
class DataTest extends TestCase
{
/**
* @dataProvider additionProvider
*/
public function testAdd($a, $b, $expected)
{
$this-assertEquals($expected, $a + $b);
}
public function additionProvider()
{
return [
[0, 0, 0],
[0, 1, 1],
[1, 0, 1],
[1, 1, 3] // 故意错误的测试案例
];
}
}
5、测试异常
测试方法是否抛出预期异常:
php
public function testException()
{
$this-expectException(InvalidArgumentException::class);
// 预期会抛出异常的代码
throw new InvalidArgumentException();
}
6、测试输出
检查方法是否有预期输出:
php
public function testOutput()
{
$this-expectOutputString('Hello');
echo 'Hello';
}
7、Mock 对象
使用 Mock 对象模拟依赖:
php
public function testObserver()
{
// 创建 Mock 对象
$observer = $this-createMock(Observer::class);
// 配置 Mock 对象预期行为
$observer-expects($this-once())
-method('update')
-with($this-equalTo('something'));
// 使用 Mock 对象测试
$subject = new Subject();
$subject-attach($observer);
$subject-doSomething();
}
8、运行测试
在命令行运行测试:
bash
./vendor/bin/phpunit tests/
9、配置文件
创建 `phpunit.xml` 文件自定义测试运行方式:
xml
<?xml version=1.0 encoding=UTF-8?
<phpunit bootstrap=vendor/autoload.php
<testsuites
<testsuite name=Application Test Suite
<directorytests</directory
</testsuite
</testsuites
<filter
<whitelist
<directory suffix=.phpsrc</directory
</whitelist
</filter
</phpunit
10、进阶主题
测试覆盖率分析
数据库测试
Web 应用测试
命令行测试
测试组织与命名约定
学习资源
[官方文档](https://phpunit.readthedocs.io/)
[PHPUnit GitHub](https://github.com/sebastianbergmann/phpunit)
《PHPUnit 实战》书籍
希望这个教程能帮助你开始使用 PHPUnit 进行 PHP 单元测试!
📣 商家广告:





0
IP地址: 137.194.50.177
搜索次数: 75
提问时间: 2025-11-06 20:25:51
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。