ilmiont / trainline
Trainline 是一个小巧的 PHP 测试框架,旨在快速创建最小单元测试。
Requires
- php: ^8.0
- league/climate: ^3.7
Requires (Dev)
- phpstan/phpstan: ^1.9
README
Trainline 是一个小巧的 PHP 测试框架。
入门
Trainline 需要 PHP ^8.0。
composer require --dev ilmiont/trainline
在您的工作目录中创建一个 trainline.json
文件
{
"directory": "tests/",
"namespace": "Tests"
}
现在,您可以通过运行 vendor/bin/trainline
来执行您的测试!
您可以使用 CLI 参数覆盖任何配置键: vendor/bin/trainline --directory tests/
。 以这种方式覆盖时,必须为每个 CLI 参数提供一个值。
编写测试
测试单元 必须 实现 Trainline\Framework\UnitInterface
接口。 建议您的测试扩展 Trainline\Framework\Unit
,它实现了 Trainline\Framework\UnitInterface
。
单元必须在没有任何参数的情况下可构造。 它还必须在您在配置中定义的目录和命名空间根中 PSR-4 自动加载。 Trainline 自动加载您工作目录中的 vendor/autoload.php
文件。
当扩展 Unit
时,您类中的所有未以 __
前缀开头的方法都将作为测试用例执行。 测试用例不接收任何参数,并且不需要返回任何值。 测试用例将顺序执行。
任何没有抛出异常的测试用例都视为成功。
__init()
和 __after()
您的单元的 __init()
方法将在每个测试用例之前被调用。
您的单元的 __after()
方法将在每个测试用例之后被调用。
__init()
和 __after()
不接收任何参数,并且不需要返回任何值。
__tests()
您可以通过实现此方法来定义哪些单元的方法应作为测试用例执行。 它必须返回一个包含要执行的测试用例方法名的数组。
断言
Trainline\Assertions
命名空间中包含了一组基本的断言函数
equiv(mixed $a, mixed $b) : bool
- 检查$a == $b
,如果不成立,则抛出Trainline\Exceptions\AssertionException
实例;抛出的异常在转换为字符串时包含比较值的良好表示。ident(mixed $a, mixed $b) : bool
- 检查$a === $b
,如果不成立,则抛出Trainline\Exceptions\AssertionException
实例;抛出的异常在转换为字符串时包含比较值的良好表示。throws(callable $callback, string $expect=null)
- 调用$callback
并期望抛出一个Throwable
。 如果$callback
执行而没有抛出异常,则抛出Trainline\Exceptions\AssertionThrowsException
。 当$expect
给定时,$callback
抛出的Throwable
必须满足instanceof $expect
;如果不成立,则抛出Trainline\Exceptions\AssertionThrownException
,当转换为字符串时,它将输出期望和接收到的Throwable
类型的好看表示。 返回\Throwable
由$callback
抛出。
报告
所有输出目前都作为格式化的 ANSI 文本输出到 stdout
。
ANSI 兼容性将自动检测。 您可以通过将 forceAnsi
配置键设置为 true
来强制 ANSI 输出。
遇到错误的测试用例将输出其名称和导致失败的 Throwable
的字符串表示。
在所有测试用例执行完成后,将输出一个包含测试运行统计信息的摘要。
API
Trainline 内部API目前未进行文档化。
欢迎您查看源代码以了解如何构建扩展。
©James Walker。遵循MIT许可证。