提问人:mario 提问时间:10/4/2010 最后编辑:mario 更新时间:11/20/2010 访问量:237
简单(非单元)测试框架,类似于 .phpt,应该评估输出/标头/错误/结果
simple (non-unit) test framework, similar to .phpt, should evaluate output/headers/errors/results
问:
我正在寻找一个更简单的测试框架。我看了一些 PHPUnit 和 SimpleTest 脚本,我发现所需的语法糖令人震惊。SnapTest 听起来不错,但同样繁琐。Apache More::Test 太程序化了,即使不符合我的口味。而 Symfony lime-test 在这方面并不独特。 像 http://everzet.com/Behat/#basics 这样的 BDD 工具非常好,但甚至比预期的抽象级别高出两个。
此外,到目前为止,我一直在使用一次性测试脚本。我想知道是否有一个测试框架/工具可以简化将它们用于自动化测试的过程,而不是扔掉它们。具体来说,我想使用以下功能:
- 评估输出(打印/回显),甚至返回值/对象
- 序列化并将其保存为探测/比较数据
- 允许将该比较输出分类为通过测试或失败
- 还收集标头、警告或错误消息(也可能是预期输出)
- 除了一些 $test->assert() 或 test::fail() 状态
基本上我懒得做测试框架的工作,手动预定义或布尔值评估和分类预期的输出。此外,我发现不必要地将测试方法包装到类中并不有趣,普通的包含脚本或函数就足够了。此外,使用预先初始化的基础和测试环境自动运行测试脚本应该不难。
旧的 .phpt 脚本及其 --expect-- 输出接近,但仍然需要太多的手动设置。此外,我更喜欢 Web GUI 来运行测试。是否有此类测试脚本的现代版本?(加上一些标头/错误/结果评估,并最终进行单元测试::assert方法)
编辑,我必须举个例子。这是典型的 PHPUnit 测试:
class Test_Something extends PHPUnit_Test_Case_Or_Whatever {
function tearUp() {
app::__construct(...);
}
function testMyFunctionForProperResults() {
$this->assertFalse(my_func(false));
$this->assertMatch(my_func("xyzABC"), "/Z.+c/");
$this->assertTrue(my_func(123) == 321);
}
}
相反,我想使用纯PHP和较少混合的测试API:
function test_my_function_for_proper_results() {
assert::false(my_func(false));
print my_func("xyz_ABC");
return my_func(123);
}
嗯,这实际上是三个测试合二为一。但要强调的是:第一个版本需要手动测试。我想要的是将测试数据发送/返回到测试框架。框架的任务是比较结果,而不仅仅是用勺子喂养的布尔值。或者想象一下,我得到了一个臃肿的数组结果或对象链,我不想在测试脚本中手动列出它们。
答:
不得不说 - 如何实现简化测试用例的示例并不明显。不幸的是,这种错综复杂或多或少是必须忍受的。也就是说,我已经看到 PHPUnit 被扩展以简化事情,以及添加 Web 测试运行器、标头测试、输出等(在这里想想 SilverStripe - 他们正在用 PHPUnit 做很多你想做的事情)。这可能是你最好的选择。例如:
- 评估输出(打印/回声):
- 启用输出缓冲并针对缓冲结果进行断言
- 收集标头、警告或错误消息
- 注册自己的存储错误消息的处理程序
- wget 针对 URL 并比较结果(标头和所有)
等。
评论
郑重声明,我现在发现了 Shinpuru。
http://arkanis.de/projects/shinpuru/
对于实际的测试用例来说,它看起来很有前途,并且使用 PHP5.3 风格的匿名函数而不是内省类包装器。
评论