rtens / scrut
轻量级 PHP 测试执行器
Requires
- php: >=5.5
- watoki/factory: 1.*
This package is not auto-updated.
Last update: 2024-09-14 17:21:25 UTC
README
scrut 是一个完整的、轻量级的 xUnit 风格 PHP 测试框架。
为什么
为什么要为 PHP 写另一个测试框架?有人可能会轻松地争辩说,已经足够多了,这是正确的。
但除了编写测试框架是件很愉快的事情之外,让我这么做的主要原因是 PhpUnit 开始感觉有点沉重,尤其是作为我 Web 应用程序工具包 中微库的要求,而且替代方案没有说服我。其他一些小原因是我需要一个更灵活的测试框架来尝试不同的测试风格,并且一直想要一个与我的工作流程相匹配的框架。
安装
要在项目中使用 scrut,请使用 Composer 引入它
composer require "rtens/scrut"
如果您想开发 scrut,请使用 git 克隆它,使用 Composer 下载其依赖项,并使用 scrut 本身(引导是编写测试框架时的一大乐趣)执行规范
git clone https://github.com/rtens/scrut.git
cd scrut
composer install
vendor/bin/scrut
用法
使用 scrut 编写测试有三种方式,您可以按需混合使用。
极简主义
编写测试的最简单、最极简的方式是创建一个文件夹(例如 spec
)中的类,如下所示
class Foo { function thisOnePasses() { assert(true); } function thisOneFails() { assert(false, "Bang"); } }
请注意,您不需要遵循任何命名约定。 scrut 将执行它找到的文件夹中所有类的所有公共方法。您可以使用 assert
函数或抛出 Exceptions
来使测试失败。
如果您现在运行 vendor/bin/scrut spec
,您应该得到以下输出。
.F
---- Failed ----
Foo::thisOneFails [/home/derp/scrut/spec/Foo.php:9]
Caught E_WARNING from /home/derp/scrut/spec/Foo.php:9
assert(): Bang failed
=( 1 Passed, 1 Failed
点表示第一个测试通过, F
表示第二个测试失败,原因打印在下面,然后是测试运行的摘要。
集成
更集成的方式是让测试类继承 StaticTestSuite
并使用 Assert
类进行断言。
class Foo extends StaticTestSuite { function thisOnePasses() { $this->assert("1", 1); } function thisOneFails() { $this->assert->equals("1", 2); } function thisOneIsEmpty() { } }
现在 vendor/bin/scrut spec
的输出应该是
.FI
---- Incomplete ----
Foo::thisOneIsEmpty [/home/rtens/testScrut/spec/Bar.php:12]
No assertions made
---- Failed ----
Foo::thisOneFails [/home/rtens/testScrut/spec/Bar.php:9]
'1' should equal 2
=( 1 Passed, 1 Incomplete, 1 Failed
请注意,空测试方法会导致测试被标记为“不完整”,因为没有进行断言。
动态
如果您不喜欢创建类,那么您可能喜欢第三种方式,即使用动态创建的对象。
return (new GenericTestSuite("Foo")) ->test("foo", function (Assert $assert) { $assert("1", 1); }); ->test("bar", function (Assert $assert) { $assert->equals(1+1, 2); });
这会得到
..
=D 2 Passed
文档
scrut 的文档以可执行规范的形式编写。您可以在 spec
文件夹中找到它。