php-kitchen / code-specs
BDD扩展,用于PHPUnit,允许以人类可读的格式编写测试规范。
Requires
- php: ^7.1
Requires (Dev)
- codeception/codeception: ^2.3
- phpunit/phpunit: ^6.2
- satooshi/php-coveralls: ^1.0
README
注意:库正在重构以发布V5.0.0版本,文档反映了新规范的样式。
Code Specs不仅仅是另一个测试库,它是你设计解决方案的方式。规范之道。
Code Specs构建为PHPUnit插件(同时支持Codeception),用于使用人类可读的格式以规范方式编写BDD风格的单元测试。
Code Specs的目的是添加一系列酷炫的单元测试工具,并展示一种将单元测试表示为行为规范的方式,该规范描述了特定类在各种使用场景中的行为。
Code Specs的“最小英雄”是Tester。Tester代表一个确保你的代码通过规范的参与者(是的,就像在Codeception中一样——这个库已由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中的输出示例)
要求
PHP >= 7.4
是必需的。
PHPUnit >= 9.1
是必需的。
入门
运行以下命令将CodeSpecs添加到项目的composer.json
中。有关特定版本,请参阅Packagist。
composer require --dev php-kitchen/code-specs
或者您可以从以下位置复制此库:
然后您可以在测试中通过从Specification
类扩展来使用CodeSpecs。示例
use PHPKitchen\CodeSpecs\Base\Specification; class YourTest extends Specification { /** * @test */ public function myMethodBehavior() { I::lookAt('my dummy variable') ->seeBool(true) ->isFalse(); } }
注意:如果您想使用CodeSpecs与Codeception一起使用,请参阅Codeception集成指南
有关更多信息和管理指南,请访问项目文档。有关发布中更改的信息,请参阅变更日志,有关升级到下一个主要版本的信息,请参阅更新指南。
贡献
如果您想提出任何问题、建议改进或只是想与社区和开发者交流,请加入我们的Discord服务器Discord服务器。有关更多信息,请参阅组织贡献规则。
传播消息
承认或引用CodeSpecs与直接贡献一样重要。
如果您将CodeSpecs用作开源项目的一部分,承认它的一种方式是在您的README中使用特殊的徽章:
如果您的代码托管在GitHub上,您可以将以下内容放在您的README.md文件中,以获取徽章
[](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>