Lime 2 alpha发布
我很高兴地宣布石灰2 α 1!自7月初以来,symfony自己的测试框架的ob娱乐下载第二个版本一直处于繁重的开发中。从那时起,添加了许多令人兴奋的新功能,现在您有机会尝试它们!
在这篇博文中,我将概述Lime 2最重要的新特性。
升级项目
升级symfony项目以ob娱乐下载使用Lime 2非常简单。您只需要替换文件lime.php
这是捆绑与symfony与符号链接到ob娱乐下载lime.php
它与Lime 2捆绑在一起。
提示石灰2几乎是完全的向后兼容的!唯一不是BC的是管理和覆盖类的配置。在《Lime 1》中,这是通过公共属性实现的,但现在已经被删除了。相反,您可以将这些属性作为选项传递给构造函数。
首先,从SVN签出一个Lime 2的副本:
> svn co http://svn.ob娱乐下载symfony-project.com/tools/lime/tags/RELEASE_2_0_0_ALPHA1 lib/vendor/Lime2
现在您可以替换symfony的ob娱乐下载lime.php
.下面的命令假设symfony安装在ob娱乐下载lib /供应商/ sob娱乐下载ymfony
.如果项目目录结构不同,请修复路径。
> cd lib/vendor/ob娱乐下载symfony/lib/vendor/lime > mv lime.php lime.php.1.0 > ln -s ../../../../Lime2/lib/lime.php lime.php
你完成了!现在所有的测试都将使用Lime 2。
注释支持
通常有必要在每次测试之前执行一些代码来准备测试平台。此代码,也称为夹具安装,必须在Lime 1的每次测试之前手动编写。为了避免这种代码重复,Lime 2提供了注释来构造和控制您的测试代码。
(php) < ?php require_once dirname(__FILE__).'/../ bootstrap /unit.php';LimeAnnotationSupport:使();$t = new LimeTest(1);// @拷贝前('data/fixtures/test.png', 'web/uploads/test.png');$thumbnail =新的CukeetThumbnail('web/uploads/test.png');// @ unlink('web/uploads/test.png');设置(缩略图);// @Test: resize()调整缩略图$thumbnail->resize(1,100);$size = getimagesize($thumbnail->getPath()); $t->is($size, array(100, 100), 'The image has been resized'); // @Test: save() saves the thumbnail under a different name $thumbnail->save(); ...
最重要的注释是@Test
.该注释标记了一段测试代码,并可选地接受打印在控制台上的注释。其他注释是@Before
,@After
,@BeforeAll
而且@AfterAll
.前两个可以用来标记之前或之后执行的代码每一个测试。另外两个用于标记代码在之前或之后运行一次所有测试。一个注释后面的所有代码都属于这个注释,直到打开下一个注释。
并行处理
Lime 2可以同时执行多个测试,利用现代多核处理器的优势。这样,测试套件运行的性能可以显著提高。
symfony任务还没有提供此功能。ob娱乐下载相反,您需要手动设置一个测试套件。为此,将以下代码添加到名为prove.php
在目录中测试/ bin
:
(php) < ?php包含dirname(__FILE__).'/../bootstrap/unit.php';$h = new LimeTestSuite();h - >注册(sfFinder::类型(“文件”)- >名称(* Test.php) - >(目录名(__FILE __).'/..'));退出(h - > run () ?0: 1);
从控制台窗口执行测试套件:
> PHP test/bin/prove.php
所有测试都应该照常执行。现在添加开关——流程
启用并行处理:
> PHP test/bin/prove.php——processes=16
测试套件的性能现在应该更好了。如果你能在评论中分享你的个人表现,我们会很高兴的!
强大的模拟和存根生成
Lime 2具有PHP中最强大但也最容易使用的模拟和存根生成器之一。通常,您希望测试您的类而不测试它们所依赖的任何其他类。这就是为什么这些其他类通常被假的实现在测试中,也称为Mock和Stub对象。因为编写这些伪实现需要花费大量时间,所以Lime 2会为你生成伪实现。
创建Stub或Mock对象调用存根()
或模拟()
在你的LimeTest
对象:
[php] $user = $t->存根('sfUser');
存根和模拟之间的基本区别是,默认情况下,存根忽略任何意外的方法调用,而模拟在这种情况下抛出异常。
要配置方法调用,只需使用预期的参数调用方法。如果不关心参数,则将方法名传递给任何()
:
(php)用户- > setAttribute(“foo”);$ user - >任何(“getAttribute”);
你可以配置方法返回值、异常和将方法调用转发给可调用对象:
(php)用户- > getAttribute(“foo”)- >返回(“酒吧”);用户- > getAttribute(“moo”)——>抛出(异常的);函数testGetAttribute($attribute){…} $ user - >任何(getAttribute) - >回调(“testGetAttribute”);
在配置预期的方法调用之后,您必须调用重放()
.现在您的对象才会像配置的那样运行。你还可以调用验证()
执行测试后,检查是否调用了所有配置的方法。
[php] $user = $t->mock('sfUser');用户- > getAttribute(用户名)- >返回(bernhard);用户- > setAttribute(“授权”,真正的);用户- >重放();$form = new LoginForm($user);//内部调用getAttribute()和setAttribute() $form->save()用户- >验证();
当你想测试一个方法被调用的频率时,使用count约束中的任意一个:
(php)用户- > getAttribute(“foo”)——>从未();用户- > getAttribute(“foo”)——> ();用户- > getAttribute(“foo”)——> atLeastOnce ();用户- > getAttribute(“foo”)- > (3);用户- > getAttribute(“foo”)——>之间(2、5);
如果您想测试单个方法参数,请使用参数()
使用任何测试操作符(例如是()
,像()
等)LimeTest
:
[php] $mailer = $t->mock('sfMailer');$mailer->任意('compose') ->参数(2)->is('bernhard.schussek@symfony-ob娱乐下载project.com') ->参数(4)->like('/您的激活码是ABCXYZ/') ->返回($message = $t->存根('Swift_Message'));梅勒- >发送消息($);
关于Mock和Stub生成器的更多信息将在即将发布的文档中提供。欧宝官网下载app
测试操作符重载
如果你试过比较两个学说对象是()
,您可能已经看到测试几乎总是失败。
[php] $user = new user ();$user-> frommarray(数组('username' => 'bernhard'));用户- >保存();$result = Doctrine:: getttable ('User')->findOneByUsername('bernhard');$t->是($result, $user, '返回正确的用户');
问题是(从测试的角度来看)Doctrine在记录中存储了大量不同记录的元数据,即使它们包含相同的属性、主键和关系。
Lime 2支持针对特定数据类型重载测试操作符。您可以实现自己的“tester”类,它指定操作符何时应该匹配此类型的值。
[php] class myTesterDoctrineRecord扩展LimeTesterObject{/** *当两条Doctrine记录具有相同的主键、*属性和关系时匹配。*/公共函数是(LimeTester $otherValue){…}} LimeTester::register('Doctrine_Record', 'myTesterDoctrineRecord');$t->是($result, $user, '返回正确的用户');
支持的数据类型为零
,整数
,布尔
,字符串
,双
,数组
,对象
,资源
以及您选择的任何类或接口名称。
接下来是什么?
Lime 2中添加了更多的功能。这些将在以后的博客文章和即将发布的文档中进行解释。欧宝官网下载app在接下来的几周里,一个CLI工具将以开发人员友好的方式执行Lime测试,这是进入beta阶段之前的最后一个主要计划功能。
Lime 2预计将在2010年12月或1月进入测试阶段,这取决于开发者对alpha版本的反馈。热烈邀请您查看Lime 2的源代码,玩它,并对其提供反馈ob娱乐下载symfony-users邮件列表或在ob娱乐下载symfony Trac.请记住,代码仍然是alpha,所以请不要在生产中使用它。
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
lime2是否提供xUnit输出?我将非常兴奋地使用它与CI解决方案,phpUnderControl,例如,不安装任何插件!
PHP test/bin/prove.php——output=xml
require_once所在的路径/ / Lime2 / lib / LimeAutoloader.php ';
LimeAutoloader:注册();
// optional -用于注释
LimeAnnotationSupport:使();