dekeysoft/pu-tester

该包已被弃用且不再维护。作者建议使用 https://github.com/php-kitchen/code-specs 包。

BDD 扩展用于 PHPUnit,允许以人类可读的格式编写测试规范。

v4.0.1 2017-12-01 15:07 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:58:38 UTC


README

logo.png

Build Status Code Coverage Code Quality Latest Stable Version Monthly Downloads Total Downloads License

注意:库正在进行重构以发布 V5.0.0,文档反映了规范的新样式。

Code Specs 不仅仅是另一个测试库 - 它是你设计解决方案的方式。规范之路。

Code Specs 被构建为一个 PHPUnit 插件(同时支持 Codeception),用于以规范方式使用人类可读的格式编写 BDD 风格的单元测试。

Code Specs 的目标是添加一系列酷炫的单元测试工具,并展示一种将单元测试表示为行为规范的方式,该规范描述了特定类在不同用例中的行为。

Code Specs 的最小英雄是 Tester,它执行魔法。Tester 代表一个确保你的代码通过规范的演员(是的,就像在 Codeception 中 - 这个库已经过时了)。自己看看吧

namespace Specs\Unit;

use PHPKitchen\CodeSpecs\Base\Specification;
use PHPKitchen\CodeSpecs\Actor\I;

/**
 * Specification of {@link IncomeCalculator}
 *
 * @author Dima Kolodko <prowwid@gmail.com>
 */
class IncomeCalculatorTest extends Specification {
    private const EXPECTED_TAX_FOR_FIRST_LEVEL_TAX_RULE = 4500;
    private const EXPECTED_TAX_FOR_SECOND_LEVEL_TAX_RULE = 7200;
    private const EXPECTED_TAX_FOR_THIRD_LEVEL_TAX_RULE = 30000;
    private const INCOME_AFTER_APPLYING_FIRST_LEVEL_TAX_RULE = 300000;

    /**
     * @test
     */
    public function calculateTaxBehavior() {
        $clientsPayments = []; // dummy variable, just for example
        $hoursSpentWorking = 160; // dummy variable, just for example
        $service = new IncomeCalculator($clientsPayments, $hoursSpentWorking);
        I::describe('income tax calculations');

        I::expect('for income less that 50 000 calculator use 10% tax rule', function () use ($service) {
            I::lookAt('first level income tax')
                ->seeNumber($service->calculateTax())
                ->isNotEmpty()
                ->isEqualTo(self::EXPECTED_TAX_FOR_FIRST_LEVEL_TAX_RULE);
        });

        I::expect('for income between 50 000 and 100 000 calculator use 12% tax rule', function () use ($service) {
            I::lookAt('second level income tax')
                ->seeNumber($service->calculateTax())
                ->isNotEmpty()
                ->isEqualTo(self::EXPECTED_TAX_FOR_SECOND_LEVEL_TAX_RULE);
        });

        I::expect('for income more than 100 000 calculator use 20% tax rule', function () use ($service) {
            I::lookAt('second level income tax')
                ->seeNumber($service->calculateTax())
                ->isNotEmpty()
                ->isEqualTo(self::EXPECTED_TAX_FOR_THIRD_LEVEL_TAX_RULE);
        });
    }

    /**
     * @test
     */
    public function calculateWithTaxBehavior() {
        $clientsPayments = []; // dummy variable, just for example
        $hoursSpentWorking = 160; // dummy variable, just for example
        $service = new IncomeCalculator($clientsPayments, $hoursSpentWorking);

        I::describe('Net income calculation');
        I::expect('calculator calculates income with tax using 10% tax rule for income less that 50 000');

        I::lookAt('income tax')
            ->seeNumber($service->calculateWithTax())
            ->isNotEmpty()
            ->isEqualTo(self::INCOME_AFTER_APPLYING_FIRST_LEVEL_TAX_RULE);


    }
}

CodeSpecs 还装饰了错误输出,例如,如果上面的“IncomeCalculator”服务错误地计算收入,错误输出将包括以下消息(以下是在 PHPStorm 中的输出示例)

picture alt

要求

PHP >= 7.4 是必需的。

PHPUnit >= 9.1 是必需的。

入门

运行以下命令将 CodeSpecs 添加到你的项目 composer.json。有关特定版本,请参阅 Packagist

composer require --dev php-kitchen/code-specs

或者你可以从以下位置复制此库

然后你可以在测试中使用 CodeSpecs,只需从 Specification 类扩展即可。示例

use PHPKitchen\CodeSpecs\Base\Specification;

class YourTest extends Specification {

    /**
     * @test
     */
    public function myMethodBehavior() {
        I::lookAt('my dummy variable')
            ->seeBool(true)
            ->isFalse();
    }
}

注意: 如果你想与 Codeception 一起使用 CodeSpecs,请参阅 Codeception 集成指南

有关更多信息和管理指南,请参阅 项目文档。有关发布更改的信息,请参阅 更改日志,有关升级到下一个主要版本的信息,请参阅 更新指南

贡献

如果你想提出任何问题、建议改进或只是想与社区和开发者交流,请加入我们的 Discord 服务器 Discord。阅读 组织贡献规则 获取更多信息。

传播信息

承认或引用CodeSpecs与直接贡献一样重要。

如果您将CodeSpecs作为开源项目的一部分使用,您可以在README中使用一个特殊的徽章来承认它:已测试

如果您的代码托管在GitHub上,您可以在README.md文件中放置以下内容以获取徽章

[![CodeSpecs](https://img.shields.io/badge/Tested_By-CodeSpecs-brightgreen.svg?style=flat)](https://github.com/php-kitchen/code-specs)

或者使用常规HTML

<a href="https://github.com/php-kitchen/code-specs"><img src="https://img.shields.io/badge/Tested_By-CodeSpecs-brightgreen.svg" alt="Tested By"></a>