funkatron / funit
FUnit 是适用于 PHP 5.3+ 的测试微型框架,部分灵感来自 QUnit。
Requires
- php: >=5.3
- kevinlebrun/colors.php: 0.2.*
- nategood/commando: 0.2.*
This package is not auto-updated.
Last update: 2024-09-14 15:07:33 UTC
README
FUnit 是适用于 PHP 5.3+ 的测试微型框架,部分灵感来自 QUnit。FUnit 由 Ed Finkler 为 Fictive Kin 创建。
如果你能编写 PHP 代码,你就能用 FUnit 编写测试。
特性
- 简单编写测试并获取输出 – 快速开始编写测试
- 简洁明了的语法
- 可以从 CLI 运行 – 无需 web 服务器
- 终端中带颜色的输出
示例
<?php require __DIR__ . '/FUnit.php'; use \FUnit as fu; // note the alias to "fu" for terseness fu::test("this is a test", function() { fu::ok(1, "the integer '1' is okay"); fu::ok(0, "the integer '0' is not okay"); // this will fail! }); $exit_code = fu::run(); exit($exit_code);
将输出
> php example_standalone.php
Running test 'this is a test...'
RESULTS:
--------------------------------------------
TEST: this is a test (1/2):
* PASS ok() the integer '1' is okay
* FAIL ok() the integer '0' is not okay
ERRORS/EXCEPTIONS: 0
TOTAL ASSERTIONS: 1 pass, 1 fail, 0 expected fail, 2 total
TESTS: 1 run, 0 pass, 1 total
查看 example_standalone.php
文件以获取更多信息,或者尝试用 php example_standalone.php
运行它
或者,如果您在浏览器中加载 standalone_example.php
,它将输出一个非常简单的 HTML 版本的文本报告。如果您正在运行 PHP 5.4 或更高版本,您可以使用开发服务器查看它,如下所示
php -S 0.0.0.0:8000 example_standalone.php
然后,在浏览器中打开 http://0.0.0.0:8000。
方法
测试套件构建方法
-
FUnit::test($name, \Closure $test)
添加一个名为 $name 的测试和一个匿名函数 $test。$test 将包含各种 断言,如FUnit::ok()
-
FUnit::run($report = true, $filter = null, $report_format = 'text')
运行已注册的测试。$report
(布尔值): 如果传递false
,则抑制报告输出。$filter
(字符串): 如果传递,则仅运行包含$filter
字符串的测试。$report_format
(字符串): 默认为 'text'。也接受 'xunit'。
-
FUnit::setup(\Closure $setup)
注册一个在每次测试开始时运行的函数。查看FUnit::fixture()
-
FUnit::teardown(\Closure $setup)
注册一个在每次测试结束时运行的函数。查看FUnit::fixture()
和FUnit::reset_fixtures()
-
FUnit::fixture($key, [$val])
检索或注册一个固定值。在 FUnit::setup() 中使用此功能将固定值分配给键,并在测试中检索这些固定值 -
FUnit::reset_fixtures()
清除 FUnit::$fixtures 数组中的所有固定值。这不能保证干净地关闭或关闭
断言
-
FUnit::ok($a, $msg = null)
断言 $a 是真值。可选的 $msg 描述测试 -
FUnit::not_ok($a, $msg = null)
断言 $a 不是真值。可选的 $msg 描述测试 -
FUnit::equal($a, $b, $msg = null)
断言 $a == $b。可选的 $msg 描述测试 -
FUnit::not_equal($a, $b, $msg = null)
断言 $a != $b。可选的 $msg 描述测试 -
FUnit::strict_equal($a, $b, $msg = null)
断言 $a === $b。可选的 $msg 描述测试 -
FUnit::not_strict_equal($a, $b, $msg = null)
断言 $a !== $b。可选的 $msg 描述测试 -
FUnit::has($needle, $haystack, $msg = null)
断言数组或对象 ($haystack
) 有键或属性 ($needle
) -
FUnit::not_has($needle, $haystack, $msg = null)
断言数组或对象 ($haystack
) 不具有键或属性 ($needle
)。请原谅我的语法。 -
FUnit::fail($msg = null, [$expected = null])
强制失败的断言。如果$expected === true
,则标记为 预期失败 -
FUnit::expect_fail($msg = null)
确保一个 预期失败。相当于FUnit::fail('msg', true)
-
FUnit::pass($msg = null)
强制成功的断言。 -
FUnit::throws($callback, $params, $exception = null, $msg = null)
断言$callback
抛出类型为$exception
的异常。$callback
必须是一个 可调用 -
FUnit::all_ok($a, $callback, $msg = null)
遍历$a
中的所有项目,并将每个传递给$callback
。如果回调对所有返回true
,则通过 -- 否则失败。$callback
必须是一个 可调用
实用方法
-
FUnit::report($format = 'text')
输出测试报告。如果您之前已抑制报告输出,则可以使用此方法手动输出报告。 -
FUnit::exit_code()
获取退出代码。如果任何测试失败,退出代码将设置为1
。否则为0
。您可以使用此值使用 PHP 函数exit()
返回成功或失败结果。
配置方法
-
FUnit::set_disable_reporting($state)
如果传递true
,则在测试运行完成后不会输出报告。通过传递false
重新启用。 -
FUnit::set_debug($state)
如果传递true
,则将输出额外的调试信息(包括计时和断言失败详情)。通过传递false
禁用。 -
FUnit::set_silence($state)
如果传递true
,则仅输出报告 -- 无进度、调试信息等。通过传递false
禁用。
报告格式
默认情况下,FUnit 输出彩色 text
输出,适用于终端。您还可以以 xunit
-style xml 输出报告。
报告格式是 FUnit::run()
的第三个参数
示例
// Outputs a colored text report. This is the default format. FUnit::run(true, null, 'text'); // Outputs xUnit-style xml FUnit::run(true, null, 'xunit');
浏览器输出
标准 text
报告格式将在通过 Web 服务器加载测试文件时输出为非常简单的 HTML。如果您正在运行 PHP 5.4+,则可以使用开发服务器进行测试。
php -S 0.0.0.0:8000 test_file.php
然后,在浏览器中打开 http://0.0.0.0:8000。
CLI 测试运行器工具
FUnit 被设计为不需要单独的测试运行器工具,但它确实提供了一个位于 bin/fu
(或通过 Composer 安装时的 vendor/bin/fu
)。fu
允许您运行单个文件中的测试、目录中的多个文件组,并筛选要运行的测试。
示例
-
fu --help
获取所有选项的详细帮助和信息 -
fu ./tests
扫描./tests
目录中具有 "test(s)" 名称的文件,并运行这些测试 -
fu tests.php
执行tests.php
中的测试 -
fu -d tests.php
使用额外的调试信息执行tests.php
中的测试 -
fu --filter="API" tests.php
仅执行tests.php
中具有 "API" 名称的测试 -
fu -s tests.php
执行tests.php
中的测试,但抑制除报告之外的所有输出
注意:当 fu
加载多个测试文件时,它会对每个文件执行 require
。这意味着每个文件中的所有代码都会被执行。对 FUnit::run()
的调用将被抑制,但非 FUnit 代码(如 exit()
调用或 require
语句)可能会引起问题。
安装
使用 Composer 安装
如果您使用 Composer 管理依赖项,则可以使用它添加 FUnit。
{ "require": { "funkatron/funit": "dev-master" } }
注意,FUnit 尚未达到 1.0!这意味着 BC 可能会中断!
如果您通过Composer安装,可以使用自动生成的自动加载器来加载FUnit,如下所示
<?php require "vendor/autoload.php" use \FUnit as fu; fu::test("this is a test", function() { fu::ok(1, "the integer '1' is okay"); fu::ok(0, "the integer '0' is not okay"); // this will fail! }); fu::run();
从GitHub安装源代码
要安装源代码
git clone git://github.com/funkatron/FUnit.git
并将其包含在您的脚本中
require_once '/path/to/FUnit/FUnit.php';
从zip/tarball安装源代码
$ curl https://github.com/funkatron/FUnit/tarball/master | tar xzv
(or)
$ wget https://github.com/funkatron/FUnit/tarball/master -O - | tar xzv
使用类加载器
如果您正在使用类加载器(例如,Symfony类加载器)进行PSR-0风格的类加载
$loader->registerNamespace('FUnit', 'path/to/vendor/FUnit');
升级
如果您正在使用低于0.5的版本,命名空间/类名已更改为遵循PSR-0自动加载器标准。基本类现在为\FUnit
,而不是\FUnit\fu
。您仍然可以通过如下方式将命名空间别名来调用所有方法:fu::XXX()
use \FUnit as fu