单元测试是软件工程中的重要环节之一。它通过编写测试代码来验证软件的各个组件是否按预期工作。PHPUnit 是一个广泛使用的 PHP 测试框架,提供了丰富的功能和工具来帮助开发者进行单元测试。
安装 PHPUnit
安装 PHPUnit 需要借助 Composer,这是一个 PHP 的依赖管理工具。首先确保你的机器上已经安装了 Composer。然后在项目目录下执行以下命令:
composer require --dev phpunit/phpunit ^9
上述命令会将 PHPUnit 下载到你的项目中,并将其添加为项目的开发依赖。^9 表示安装 PHPUnit 9.x 版本。
编写第一个测试
假设我们有一个简单的类 MathHelper,它有两个方法:add 和 subtract。我们将为这两个方法编写单元测试。
创建 MathHelper 类
首先,创建 MathHelper 类文件 MathHelper.php:
// www.javascriptcn.com code example
<?php
class MathHelper {
public function add($a, $b) {
return $a + $b;
}
public function subtract($a, $b) {
return $a - $b;
}
}编写测试类
接下来,我们需要创建一个测试类来验证 MathHelper 类的方法是否正确。创建文件 MathHelperTest.php:
// www.javascriptcn.com code example
<?php
use PHPUnit\Framework\TestCase;
class MathHelperTest extends TestCase {
public function testAdd() {
$mathHelper = new MathHelper();
$result = $mathHelper->add(10, 5);
$this->assertEquals(15, $result);
}
public function testSubtract() {
$mathHelper = new MathHelper();
$result = $mathHelper->subtract(10, 5);
$this->assertEquals(5, $result);
}
}运行测试
打开终端,切换到项目根目录,运行以下命令:
./vendor/bin/phpunit MathHelperTest
如果一切正常,你应该能看到类似如下的输出:
PHPUnit 9.5.2 by Sebastian Bergmann and contributors. . 2 / 2 (100%) Time: 00:00.016, Memory: 4.00 MB OK (2 tests, 2 assertions)
这表示你的测试已经成功通过。
使用数据提供者
有时,一个方法可能需要在多种输入情况下进行测试。为了简化这一过程,可以使用数据提供者。
修改 MathHelper 类
假设 MathHelper 类新增了一个方法 multiply:
public function multiply($a, $b) {
return $a * $b;
}编写测试类
更新 MathHelperTest 类,添加一个新的测试方法并使用数据提供者:
// www.javascriptcn.com code example
<?php
use PHPUnit\Framework\TestCase;
class MathHelperTest extends TestCase {
public function testAdd() {
$mathHelper = new MathHelper();
$result = $mathHelper->add(10, 5);
$this->assertEquals(15, $result);
}
public function testSubtract() {
$mathHelper = new MathHelper();
$result = $mathHelper->subtract(10, 5);
$this->assertEquals(5, $result);
}
/**
* @dataProvider multiplicationDataProvider
*/
public function testMultiply($a, $b, $expected) {
$mathHelper = new MathHelper();
$result = $mathHelper->multiply($a, $b);
$this->assertEquals($expected, $result);
}
public function multiplicationDataProvider() {
return [
[2, 3, 6],
[5, 5, 25],
[0, 10, 0],
[-1, 10, -10]
];
}
}运行测试
再次运行测试,这次将会验证 multiply 方法在不同情况下的表现。
断言
PHPUnit 提供了多种断言方法,用于验证方法的输出是否符合预期。常见的断言包括:
assertEquals($expected, $actual):验证两个值是否相等。assertTrue($condition):验证条件为真。assertFalse($condition):验证条件为假。assertNull($value):验证值是否为 null。assertIsArray($value):验证值是否为数组。
你可以根据具体需求选择合适的断言方法。
结论
通过以上步骤,我们了解了如何安装 PHPUnit、编写基本的测试以及如何使用数据提供者和断言。掌握这些基础知识后,你可以进一步探索更复杂的测试场景和高级功能,如模拟对象、覆盖率报告等。
希望本章内容对你有所帮助,祝你在 PHP 单元测试之路上越走越远!