摘要: 我们经常要在子类的initialize方法中调用super和super()。从语法上说super和super()是有微妙区别的。super不带括号表示调用父类的同名函数,并将本函数的所有参数传入父类的同名函数;super()带括号则表示调用父类的同名函数,但是不传入任何参数;演示代码如下:1classSParent2definitialize*args3args.each{|arg|putsarg}4end5end67classSChild<SParent8definitializea,b,c9super10end11end1213a,b,c=*%W[abc]14SChild.newa, 阅读全文
posted @ 2011-07-23 14:09 乙醇 阅读(3882) 评论(0) 推荐(0) 编辑
摘要: 默认情况下使用selenium或者waitr webdriver启动浏览器,浏览器中保存的cookie是不可访问的。为什么要保留浏览器中的cookie呢?这是因为有些站点登陆时候有验证码或动态密码验证。一般情况下selenium或watir webdriver是无法获取动态密码或验证码自动完成登陆的。那么使用动态密码或验证码的网站我们就无法自动化测试了么?答案是不一定,因为有些网站登陆后会在cookie中写入当前用户的登录态,于是只要登陆一次该站点,那么下次访问的时候就不需要再登陆了。因此我们需要让浏览器为我们保存cookie以使得我们可以不需要登陆站点就能进行自动化测试。但是selenium 阅读全文
posted @ 2011-07-23 12:26 乙醇 阅读(2624) 评论(0) 推荐(1) 编辑
摘要: 观察者模式应该是最容易理解的设计模式了。考虑这个例子。作为雇员的你当工资发生改变的时候你会想到什么?请朋友吃饭?给女朋友买衣服?给自己买台Iphone4?很可惜,你所增加的那点可怜的工资恐怕难以支持你做以上这些事情吧。当你工资增加之后,你的个人所得税理所当然的增加了;你的住房公积金提高了;你的社保不出意外也要多交了。剩下来的那点应该也不够塞牙了。这个理应是喜剧的杯具中实际上包含了观察者模式的基本概念。在这个例子中,社保局、税务局实际上是你的观察者。当你的工资发生变化时,你(一般来说是你的雇主)会通知有关部门,以便有关部门能够根据你的收入调整税收或社保政策。下面的代码(使用ruby1.9实现,1 阅读全文
posted @ 2011-07-23 12:21 乙醇 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 一般来说,观察者模式的定义应该是这样的:building a clean interface between the source of news that some object has changed and the consumers of that news。观察者模式在消息的生产者和消费者之间建立了clean interface,这样就使得消息的生产者和消费者之间的耦合是抽象的。被观察者可以不认识任何一个的观察者,它只知道他们都实现了一个共同的接口。由于观察者和被观察者没有紧密的耦合在一起,所以他们可以属于不同的抽象层次。观察者模式支持广播通信,被观察者会向每个注册了的观察者发送广播 阅读全文
posted @ 2011-07-21 20:11 乙醇 阅读(722) 评论(0) 推荐(1) 编辑
摘要: 好像网上一直没有比较详细的中文资料来讲述如何使用cakephp来实现i18n。正好昨天被逼无奈的将代码中的提示中文化了一把,略有心得,简而志之。中文化cakephp有如下几步:1,在代码中使用__()函数。在需要进行中文化的地方使用__()函数,如下所示:__('This is the string i need to translate', true);将第2个参数置为ture,这样如果有相对应的翻译词条的话那么翻译过的词条将输出,否则会输出未翻译的词条。2,执行i18n task如果你的代码中存在__()函数的话,你就可以执行i18n task来进行代码扫描了。i18n t 阅读全文
posted @ 2011-07-17 21:58 乙醇 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 原本以为要自己写helper去截取中文字符串,没想到cakephp的Text helper类中已经提供了truncate方法。下面是truncate方法的原型。truncatetruncate(string $text, int $length=100, array $options)Cuts a string to the $length and adds a suffix with ‘ending’ if the text is longer than $length. If ‘exact’ is passed as false, the truncation will occur aft 阅读全文
posted @ 2011-07-17 20:59 乙醇 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 众所周知php原生函数substr是不支持截取中文字符串的。下面的代码提供了多种截取php中文字符串的方法。1. 截取GB2312中文字符串<?php< ?php//截取中文字符串function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr($str, $i, 2); $i++; 阅读全文
posted @ 2011-07-16 19:04 乙醇 阅读(16845) 评论(2) 推荐(1) 编辑
摘要: 写过java的同学一定对java中无处不在的设计模式印象深刻。相比较而已ruby在设计模式这一块就显得稍微有些拿不出手了。作为一门动态到极致的语言,设计模式在ruby中的应用可能不太传统,有些许的变种。但万变不离其宗,在这里我们就通过一些ruby代码所描述的例子来理解和学习一些基本的设计模式。注:本文中所有例子及代码均来自ruby design pattern一书,无任何本人原创,请勿对本人产生个人崇拜。从这里开始:模板模式。下面的代码实现了一个简单的模板,代码通俗易懂,应该很好理解。class Report def initialize @title = 'Monthly Repor 阅读全文
posted @ 2011-07-13 23:31 乙醇 阅读(474) 评论(0) 推荐(0) 编辑
摘要: strategy.txt模板模式固然不错,但其还是有一些缺陷的。比如其实现依赖于继承并且缺足够的灵活性。在这时候我们就需要找到一个更加优化的解决方案——策略模式。下面是使用策略模式实现的Report模板1#encoding:utf-823classFormatter4defoutput_reporttitle,text5raise'cannotcallAbstractmethod'6end7end89classHTMLFormatter<Formatter10defoutput_reporttitle,text11puts'<html>'12p 阅读全文
posted @ 2011-07-13 23:27 乙醇 阅读(538) 评论(0) 推荐(0) 编辑
摘要: 今天将waitr代码移植至watir-webdriver时,发现watir-webdriver的Select.select(text)方法似乎不支持中文的text。也就是说watir-webdriver的select方法无法选择中文的option。研究了一下源码发现Select.select方法是这样实现的: 1 def select(str_or_rx) 2 select_by :text, str_or_rx 3 end 4 5 #select方法又调用了select_by方法 6 def select_by(how, str_or_rx) 7 assert_exists 8 9 case 阅读全文
posted @ 2011-07-12 19:32 乙醇 阅读(1286) 评论(1) 推荐(0) 编辑

友情链接 虫师的blog  测试教程网  重定向科技  省略