使用phpunit进行单元测试

这篇具有很好参考价值的文章主要介绍了使用phpunit进行单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用phpunit进行单元测试

本教程假定您使用 PHP 8.1 或 PHP 8.2。您将学习如何编写简单的单元测试以及如何下载和运行 PHPUnit.

PHPUnit 10 的文档 在这。

下载:可以用以下2种方法之一:

1.PHP 存档 (PHAR)

我们分发了一个 PHP存档(PHAR),其中包含使用PHPUnit 10所需的一切 。只需从这里 下载 并使其可执行:

wget -O phpunit https://phar.phpunit.de/phpunit-10.phar
➜ chmod +x phpunit
➜ ./phpunit --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.

2.Composer

您可以使用 Composer 将 PHPUnit 作为本地、每个项目、开发时依赖项添加到您的项目中:

➜ composer require --dev phpunit/phpunit ^10./vendor/bin/phpunit --version
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.

上面显示的示例假定composer在您的$PATH上。

您的 composer.json 应该看起来像这样:

{
    "autoload": {
        "classmap": [
            "src/"
        ]
    },
    "require-dev": {
        "phpunit/phpunit": "^10"
    }
}

代码

src/Email.php

<?php 
declare(strict_types=1);
final class Email
{
    private string $email;
    private function __construct(string $email)
    {
        $this->ensureIsValidEmail($email);
        $this->email = $email;
    }
    public static function fromString(string $email): self
    {
        return new self($email);
    }
    public function asString(): string
    {
        return $this->email;
    }
    private function ensureIsValidEmail(string $email): void
    {
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException(
                sprintf(
                    '"%s" is not a valid email address',
                    $email
                )
            );
        }
    }
}

测试代码

tests/EmailTest.php

<?php 
declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class EmailTest extends TestCase
{
    public function testCanBeCreatedFromValidEmail(): void
    {
        $string = 'user@example.com';
        $email = Email::fromString($string);
        $this->assertSame($string, $email->asString());
    }
    public function testCannotBeCreatedFromInvalidEmail(): void
    {
        $this->expectException(InvalidArgumentException::class);
        Email::fromString('invalid');
    }
}

测试执行:以下2种方法都可以:

1.PHP 存档 (PHAR)

./phpunit --bootstrap src/autoload.php tests
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
..                                        2 / 2 (100%)
Time: 70 ms, Memory: 10.00MB
OK (2 tests, 2 assertions)

上面假设你已经下载了phpunit.phar并将其作为phpunit放入你的$PATH,并且src/autoload.php 是一个为要测试的类设置自动加载 的脚本。这样的脚本通常使用 phpab 等工具生成。

–bootstrap src/autoload.php指示 PHPUnit 命令行测试运行程序在运行测试之前包含src/autoload.php.
tests 指示 PHPUnit 命令行测试运行程序执行在 tests 目录的 *Test.php 源代码文件中声明的所有测试.

2.Composer

./vendor/bin/phpunit tests
PHPUnit 10.0.0 by Sebastian Bergmann and contributors.
..                                        2 / 2 (100%)
Time: 70 ms, Memory: 10.00MB
OK (2 tests, 2 assertions)

上面假设 vendor/autoload.php(由 Composer 管理的自动加载器脚本)存在,并且能够加载 Email 类的代码。根据设置自动加载的方式,您可能需要立即运行composer dump-autoload。

tests 指示 PHPUnit 命令行测试运行程序执行在 tests 目录的 Test.php 源代码文件中声明的所有测试.

一些测试组件推荐:

https://packagist.org/packages/mockery/mockery
phpunit/phpunit
fakerphp/faker
https://github.com/phpstan/phpstan
vimeo/psalm
mikey179/vfsstream
rector/rector

引用

declare和strict_types

ps:declare(strict_types=1);

严格类型
默认情况下,如果能做到的话,PHP将会强迫错误类型的值转为函数期望的标量类型。例如,一个函数的一个参数期望是string,但传入的是integer,最终函数得到的将会是一个string类型的值。
可以基于每一个文件开启严格模式。在严格模式中,只有一个与类型声明完全相符的变量才会被接受,否则将会抛出一个TypeError。 唯一的一个例外是可以将integer传给一个期望float的函数。
使用 declare 语句和strict_types 声明来启用严格模式
https://blog.csdn.net/joshua317/article/details/121252625

assertsame

使用运算符检查身份
报告由 if 标识的错误,如果两个变量的类型和值不同 或者 两个变量不引用同一对象 报错
https://docs.phpunit.de/en/10.1/assertions.html#assertsame文章来源地址https://www.toymoban.com/news/detail-658139.html

到了这里,关于使用phpunit进行单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用PowerMock进行单元测试

    原博文:如何使用PowerMock进行单元测试 (techdatafuture.com) 持续更新 PowerMock是一个用于增强JUnit和TestNG的单元测试框架,它允许开发者在单元测试中模拟和修改代码中的静态方法、私有方法和构造函数。PowerMock基于Mockito和EasyMock,为Java开发者提供了一种更灵活、强大的测试工具

    2024年02月16日
    浏览(47)
  • Php Jenkins phpunit配置

    目录 作用 前提 安装 安装xUnit插件 win10重启Jenkins 全局环境设置 创建项目配置 描述 源码管理 构建触发器 构建步骤 插件安装 工作空间 php代码phpunit文件示例 项目根目录配置 phpunit.xml Protect/Tests/test_start.php composer.json jenkins 自动化单元测试持续集成php Phpunit 构建流水线示例配置

    2024年02月13日
    浏览(30)
  • 使用Simulink Test进行单元测试

    本文摘要:主要介绍如何利用Simulink Test工具箱,对模型进行单元测试。内容包括,如何创建Test Harness模型,如何自动生成excel格式的测试用例模板来创建测试用例,如何手动填写excel格式的测试用例模板来手动创建测试用例。 单元测试的目的 创建完模型后,我们需要验证模型

    2024年02月16日
    浏览(42)
  • C# 使用xUnit进行单元测试

    目录 写在前面 操作步骤  执行结果 xUnit.net 是 NUnit 的作者Jim Newkirk搞的一个新的单元测试框架,目的是解决 NUnit 存在的一些问题和缺点,并在框架中加入一些最佳实践和扩展能力。 主要的改进点如下: 为每个测试方法产生一个对象实例 取消了 [SetUp] 和 [TearDown] 取消了 [Ex

    2024年02月04日
    浏览(40)
  • 使用 AssertJ 进行单元测试的提示

    单元测试已成为开发的标准部分。许多工具可以以许多不同的方式用于它。本文演示了一些提示,或者说,对我来说效果很好的最佳实践。 在本文中,您将了解 如何使用 JUnit 和 Assert 框架编写干净且可读的单元测试 在某些情况下如何避免假阳性测试 编写单元测试时应避免的

    2024年04月13日
    浏览(34)
  • 使用Junit进行单元测试的简单例子

    首先新建一个工程,选择合适的路径和JDK版本,其它默认就行。 把Main.java内容改为如下。    后面就是对add方法增加单元测试 在project窗口中右击项目,在菜单中选择:New - Directory 在弹出的提示框中输入目录名:test 。 然后右击 project窗口中 test 目录,在弹出菜单中选择:

    2024年02月09日
    浏览(58)
  • Python中的单元测试框架:使用unittest进行有效测试

    在软件开发中,单元测试是一种测试方法,它用于检查单个软件组件(例如函数或方法)的正确性。Python 提供了一个内置的单元测试库,名为 unittest ,可以用来编写测试代码,然后运行测试,并报告测试结果。 本文将向你介绍如何使用 unittest 来编写和运行单元测试。通过阅

    2024年03月09日
    浏览(42)
  • 使用Glib中测试框架对C代码进行单元测试

    C++项目的测试框架比较常见的是Google的 gtest (前文CMake项目使用ctest+gtest进行单元测试有使用实例介绍 gtest ,感兴趣的读者可以去看看),也有一些其它框架,比如Boost中的测试框架。这些框架虽然也可以测试C代码,但是如果在一个纯C项目中引入这些的框架,则需要使用C+

    2023年04月22日
    浏览(37)
  • Python高级用法:使用unittest进行单元测试

    Python中含有一个单元测试模块unittest,我们可以使用其中的工具来测试代码。在编写测试用例后,可以查看一系列输入是否得到了预期的输出。单元测试专注于测试软件单元,软件单元可以被理解为应用程序代码的最小可测试部分。 在代码中我们需要测试的是一个数字是否为

    2024年01月19日
    浏览(54)
  • 如何使用CMake的CTest进行单元测试

    如何使用CMake和CTest进行单元测试。 CMake是一个跨平台的构建工具,可以自动生成与平台相关的Makefile或Visual Studio项目文件,简化了C++程序的构建过程。而CTest是CMake的测试工具,它可以自动化运行单元测试,收集测试结果并生成报告。 下面是使用CMake和CTest进行单元测试的步骤

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包