学习PHPUnit 8的基本概念

132 阅读4分钟

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,让我们继续进行,并按下面的截图所示结构我们的项目。

project structure

作为一个经验法则,在编写实际代码之前,必须先编写测试。所以现在,让我们继续写我们的测试案例,然后在我们的应用程序中使用。

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 类,因为我们先定义了我们的测试案例。divisionTheoremsetValues(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_number last_number
  • modulus() - 这个函数返回之前创建的两个数字的模数。

运行PHPUnit测试

现在我们已经定义了我们的两个类,DivisionModularArithmenticTest 。在这一节中,我们将执行PHPUnit测试来断定它们是否工作。

首先,更新你的composer.json 文件,如下所示。

{
    "require-dev": {
        "phpunit/phpunit": "^8"
    },
    "autoload": {
        "psr-4": {
            "Application\\":"Application"
        }
    }
}

该更新说明我们正在使用目录ApplicationApplication 命名空间。

运行下面的命令来更新这个合成器文件。

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文件以方便测试。