PHPUnit,更广阔的前景
开发人员主要在PHP或其他语言中编写单元测试,作为一种良好的做法,帮助他们及时发现和修复错误,重构代码,并记录被测程序的一个单元。
简介
在本教程中,我们将讨论PHPUnit的基本概念。然后,我将告诉你如何开始使用这个工具为你的PHP应用程序编写基本的测试。
前提条件
要继续学习本教程,你应该已经熟悉了基本的PHP概念。最好是在本地开发环境中安装了PHP,以帮助你边读边测试。
教学目的
本教程的目的是教给你所有关于单元测试的知识。到最后,你应该能够构建你的PHP应用程序,使用断言编写基本的单元测试,并在终端显示结果。
开始使用PHPUnit
单元测试确保源代码的每一个单元都能按预期工作。编写这些测试是非常重要的,因为它们有助于在运行应用程序时发生错误时进行错误诊断。实现这一目标的方法之一是使用PHPUnit。
如果你做的单元测试是相互独立的,那将是最好的,这意味着当一个测试案例返回错误,例如,它应该只指出错误的位置,而不是其他。
安装PHPUnit
在本教程中,我们将安装 PHPUnit 9.5。这个软件包可以和 PHP 7.3 配合使用,但最新版本的 PHP 会更有效。在写这篇文章的时候,目前的版本是 PHP 8。
现在,为了在本地开发环境中安装 PHPUnit,请在终端运行以下命令。
composer require --dev phpunit/phpunit ^8 # this version may vary
根据你的网络连接情况,这需要几分钟的时间。完成后,继续并通过运行以下命令检查已安装的版本。
./vendor/bin/phpunit --version
预期的输出
# note that this version may vary from your PHPUnit version
PHPUnit 8.5.2 by Sebastian Bergmann and contributors.
测试案例规则
编写单元测试有一套规则需要遵循,如下所述。
- 测试的格式是:
<prefix>Test。例如,exampleTest。 - 测试类方法必须采取的格式是
test<suffix>。例如,testMethod。 - 测试类必须扩展
\PHPUnit\Framework\TestCase类。 - 每个测试用例文件的名称必须与类的名称相同,如下节所示。
编写单元测试
现在我们已经安装了PHPUnit,让我们继续进行,并按下面的截图所示结构我们的项目。

作为一个经验法则,在编写实际代码之前,必须先编写测试。所以现在,让我们继续写我们的测试案例,然后在我们的应用程序中使用。
在myTests 目录中,创建一个文件ModularArithmenticTest.php ,并添加以下内容。
class ModularArithmenticTest extends \PHPUnit\Framework\TestCase
{
public function testDivisionTheorem()
{
$divisionTheorem = new Application\Division;
$divisionTheorem->setValues(61,20);
$this->assertEquals(40, $divisionTheorem->modulus());
}
}
在上面的文件中,你会注意到我们已经遵循了我们在上一节中定义的每一条规则。我们首先创建一个文件,ModularArithmenticTest.php 。
在这个脚本中,我们创建一个与文件名称相同的类。然后我们扩展\PHPUnit\Framework\TestCase 类。在这个类中,我们定义了以test 为前缀的方法testDivisionTheorem() 。
这个方法testDivisionTheorem() ,有我们从Division 类中实例化的$divisionTheorem 对象。值得注意的是,我们还没有定义Division 类,因为我们先定义了我们的测试案例。divisionTheorem 有setValues(arg1,arg2) ,它需要两个参数。
这个方法也调用当前类中的assertEquals() 方法。这个方法接收两个参数,并对它们进行比较,以检查它们是否确实相等。
创建用于测试的应用程序
现在我们已经定义了单元测试,使用PHPUnit的内置方法assertEquals() 来检查两个数字是否相等,让我们继续创建Division 类。
在我们之前创建的application 文件夹中,创建一个文件Division.php 并添加以下内容。
<?php
namespace Application;
// create a class Division
class Division
{
//define properties
private $first_number;
private $last_number;
/**
* create a function setValues that takes in arrays
*/
public function setValues($first_number,$last_number)
{
$this->first_number = $first_number;
$this->last_number = $last_number
}
/**
* Find the modulus of the two numbers
*/
public function modulus()
{
return $last_number % $first_number;
}
}
在上面的脚本中,我们已经创建了一个类,Division ,有两个属性。
$first_number$last_number
我们还定义了两个方法。
setValues()- 这个方法需要两个数字类型的参数。它接收 和 。first_numberlast_numbermodulus()- 这个函数返回之前创建的两个数字的模数。
运行PHPUnit测试
现在我们已经定义了我们的两个类,Division 和ModularArithmenticTest 。在这一节中,我们将执行PHPUnit测试来断定它们是否工作。
首先,更新你的composer.json 文件,如下所示。
{
"require-dev": {
"phpunit/phpunit": "^8"
},
"autoload": {
"psr-4": {
"Application\\":"Application"
}
}
}
该更新说明我们正在使用目录Application 和Application 命名空间。
运行下面的命令来更新这个合成器文件。
composer update
接下来,添加phpunit.xml 文件。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap = "vendor/autoload.php"
backupGlobals = "false"
backupStaticAttributes = "false"
colors = "true"
convertErrorsToExceptions = "true"
convertNoticesToExceptions = "true"
convertWarningsToExceptions = "true"
processIsolation = "false"
stopOnFailure = "false"
syntaxCheck = "false">
<testsuites>
<testsuite name="Modulus">
<directory>myTests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src/</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
</php>
</phpunit>
在你的应用程序的根部,运行下面的命令。
./vendor/bin/phpunit
结论
在本教程中,我们已经讨论了PHPUnit 8的基本概念。然后,我们看到如何创建测试类来测试一个应用程序。我们还配置了XML文件以方便测试。