在PHP世界中,测试的广泛性,支持性,开发性如何?与Java相提并论?那里有Ruby/Rails?我用Google搜索并发现测试框架存在,但我想知道它们是否被广泛使用.
主要的PHP IDE是否具有Eclipse Java工具或NetBeans的Ruby/Rails工具的内置测试运行器?像Rails一样在PHP的MVC框架中进行测试吗?
我问,因为我工作的小组想聘请某人为他们开发PHP应用程序.我担心质量和维护,因为我可能会被要求支持这件事.
至少有两个成熟的,独立的JUnit样式测试套件,分别名为PHPUnit和SimpleTest.
就MVC框架而言,Symfony有自己的测试框架,名为lime,Code Igniter有一个unit_test库,CakePHP依赖于前面提到的SimpleTest.
我知道Zend Studio内置了对PHPUnit测试的支持,PHPUnit和SimpleTest都有命令行运行器,因此可以集成到任何工作流程中.
如果开发人员想要利用它们,那么PHP世界中的工具就在那里,智能商店也会利用它们.
注意事项是PHP投诉课程的标准.有两个PHP社区; PHP作为构建软件的平台,PHP作为与Web服务器,Web浏览器和数据库交互的方式,在Web上生成类似应用程序的东西.它不是黑白相间的东西,更像是连续统一体; 在软件开发人员方面,更多的单元测试和TDD支持和使用在任何其他平台上.在"拼凑一堆我不理解的东西,但仍然得到结果的人"中,这是闻所未闻的.
有很多非框架/自定义框架遗留的PHP代码,很难获得有用的测试工具.PHP也很容易适用于依赖于运行浏览器环境的模式.除了我自己的观察之外,我没有任何证据支持这一点,但很多关心测试的PHP商店最终都依赖于验收测试(即Selenium)来代替实际的单元测试,测试优先等发展
在您的具体情况下,采访您的团队将要雇佣的开发人员.
问他们使用什么单元测试框架
一般来说,要求他们描述他们开发新功能及其支持测试的真实世界示例
一般来说,要求他们描述他们的测试失败的时间以及他们为解决这种情况所做的工作的真实世界的例子
您对他们将要描述的具体情况不太感兴趣,并且对他们在一般情况下讨论他们的代码测试知识的方式更感兴趣.
每当我使用XUnit样式工具TDD项目时,我都很难在正确的位置找到我的头.我发现使用为行为驱动开发设计的工具或" 通过示例进行规范 "使我更容易正确地进行TDD - 即专注于设计,暴露意图和描述特定环境中的行为.没有测试.
那就是说,我想在谈话中介绍佩奇.从项目网站上的自述文件.
pecs是一个微小的行为驱动开发库,适用于PHP 5.3,la RSpec或JSpec.
如果您已经使用过JSpec或者更好,Jasmine-BDD(对于JavaScript)描述行为的佩奇风格应该是非常熟悉的.我发现这种风格非常适合组件级规格.如果您正在寻找功能级别规范(故事或用户验收测试)的PHP工具,请考虑Behat.
回到佩奇,这是一个从佩奇项目网站中剔除的例子:
describe("Bowling", function() { it("should score 0 for a gutter game", function() { $bowling = new Bowling(); for ($i=0; $i < 20; $i++) { $bowling->hit(0); } expect($bowling->score)->to_equal(0); }); });
是的,这是一个PHP规范.通过pecs源代码,看起来作者能够通过利用PHP 5.3 +,Lambdas和闭包中的新热点来解决这个问题.所以我想这意味着你不能在任何基于PHP <5.3(仅限FYI)的项目中使用pecs.
此外,pecs不像PHPUnit或SimpleTest那样成熟.但是,我认为PHP社区中BDD的支持者应该支持像pecs这样的工具的增长,这些工具鼓励"通过示例进行规范"或BDD,而不会因为必须使用传统的XUnit测试工具而产生混淆.
这些天我在Python中比PHP工作更多.但是,下次我选择一个PHP项目时,如果我有像pecs这样的成熟的社区支持工具来制作软件的规范,我将非常高兴.
我在Behat/Mink http://behat.org上有过惊人的经历
我同意其他人的PHP作为一个单元测试平台不是一个有趣或经验BDD是最好的方式,如果你使用任何PHP框架
围绕作曲家作为回购构建工具包围我是最大的绊脚石,但我们能够使用Behat Mink Selenium Webdriver独立服务器jar作为一个惊人的设计和回归测试工具.我们曾经在Jenkins服务器上运行我们的CakePHP应用程序的回归套件,但事实证明它不是那么"快速失败"
现在我们的工作流程是这样的:在小黄瓜精炼故事写入功能中创建故事并且删除任何新步骤defs开始编码php解决方案以进行测试然后在最后我们有一个工作特性或错误修复与bdd测试覆盖它
我们设置了一个带有Behat设置的Ubuntu VM,并将其复制到每个工作站.我们将它融入我们的流程中.我们只需更改运行测试,然后开始编写新内容.
我们编写了一个shell脚本来自动运行mysql转储并在每个特性之前加载它们,这使得重构代码变得轻而易举.
Mink WebAssert类为您提供验证行为所需的所有断言常规会话/ CommonContext类非常适合使用css或xpath.
我之前使用过Capybara/WebDriver和Java和Rails项目,发现与Behat相比,设置开销/学习曲线太高了.