pluf/test

A pluf 模拟对象和测试工具


README

Build Status codecov Maintainability Test Coverage Coverage Status

本教程假设您使用 PHP 7.3 或 PHP 7.4。您将学习如何编写简单的单元测试以及如何下载和运行 PlufTest。

PlufTest 基于 PHPUnit 8。

安装

您可以使用 Composer 将 Pluf/Test 添加为项目本地、特定项目、开发时的依赖项。

➜ composer require --dev pluf/test ^6

➜ ./vendor/bin/pluftest --version
Pluf/Test 6.0.0 by pluf.ir and contributors.

上述示例假设 composer 已添加到您的 $PATH。

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

{
    "autoload": {
        "classmap": [
            "src/"
        ]
    },
    "require-dev": {
        "pluf/test": "^9"
    }
}

测试代码

假设有一段代码

src/Email.php

内容如下

<?php
declare(strict_types=1);

final class Email
{
    private $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 __toString(): 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 testCanBeCreatedFromValidEmailAddress(): void
    {
        $this->assertInstanceOf(
            Email::class,
            Email::fromString('user@example.com')
        );
    }

    public function testCannotBeCreatedFromInvalidEmailAddress(): void
    {
        $this->expectException(InvalidArgumentException::class);

        Email::fromString('invalid');
    }

    public function testCanBeUsedAsString(): void
    {
        $this->assertEquals(
            'user@example.com',
            Email::fromString('user@example.com')
        );
    }
}

测试就绪

注意:不要在命名空间中放置测试。

运行测试

./vendor/bin/phpunit --bootstrap vendor/autoload.php tests/EmailTest
PHPUnit 8.0.0 by Sebastian Bergmann and contributors.

...                                                                 3 / 3 (100%)

Time: 70 ms, Memory: 10.00MB

OK (3 tests, 3 assertions)

使用 --bootstrap vendor/autoload.php 指示 PHPUnit 命令行测试运行器在运行测试之前包含 vendor/autoload.php。

tests/EmailTest 指示 PHPUnit 命令行测试运行器执行在 tests/EmailTest.php 中声明的 EmailTest 类的测试。

使用 tests 代替 tests/EmailTest 将指示 PHPUnit 命令行测试运行器执行 tests 目录中所有在 *Test.php 源代码文件中声明的测试。

贡献

如果您想为 Pluf 贡献,请阅读 README 和 CONTRIBUTING 文档。

以下是最重要的指南描述:

所有代码贡献 - 包括具有提交访问权限的人的贡献 - 必须通过拉取请求,并由核心开发者审核后才能合并。这是为了确保对所有代码进行适当的审查。

创建项目分支,创建功能分支,并向我们发送拉取请求。

为了确保代码库的一致性,您应该确保代码遵循 PSR-2 编码标准。