前几天看了Google Testing Blog上的一篇文章讲到C++因为没有反射机制,所以如何注册测试用例就成了一件需要各显神通的事情.从我的经验来看,无论是Google的GTest还是微软的LTM,都是通过宏来解决问题.但是对于Ruby之流的动态语言,这种事情太小菜一叠了.请看以下代码例子: class Test def test_001 puts 'test_001' end def test_002 puts 'test_002' end end t = Test.new test_me…
<Ruby元编程> 第二章 对象模型 类定义揭秘inside class definitions: class关键字更像一个作用域操作符,核心作用是可以在里面随时定义方法. [].methods.grep(/^re/):调用 出Array的所有以re开头的method. Monkeypatch:涉及全局修改,定义某个方法前应该仔细检查该类是否已有同名的方法. 实例对象存放在对象中,方法存放在类中. 类的真相:类本身也是对象.Ruby允许在运行时修改类的信息. Class.instance_me…
上个星期测试道的Monkey老师和我聊到测试用例参数过多的问题,其实这样的问题在我这里也同样经历过.比如我的测试用例必须面对不同的测试环境,每个环境有无数的参数,开发的最初阶段,因为参数少,所以就放在执行的命令行里,随着测试用例的不断增长,参数从4-5个增长到30多个,而且每个用例使用的参数也不完全相同,有使用ABCD的,有使用ADHJ的.另外有些参数想传一个数组进去,用命令行参数的方法就很难处理. 经过考虑,果断的使用配置文件来解决问题.选择配置文件当时有两个方案,一个是直接写成Ruby代码,…
第4章代码块blocks 基础知识 作用域:用代码块携带variables through scopes 通过传递block给instance_eval方法来控制作用域. 把block转换为Proc,lambda这样的可反复调用的对象.4.5 4.12基础 def a_method(a,b)   a + yield(a,b) end p a_method(2,1){|x, y| x * y}  #=>4 4.3代码块是闭包Closures 定义一个块时,它会获取当前环境中的绑定bingding,…
元编程不过是编程--经典必读 作用域(绑定) 打破作用域门的方式 对象模型图 七条规则 法术手册 作用域(绑定) 改变作用域的关键字, 分别是module,class和def.我们称为作用域的门(scope gate) instance_eval以实例作用域执行代码 class_eval以类定义作用域执行代码 Kernel#eval方法,当前上下文中直接执行代码字符串 instance_eval class_eval 对象 单例方法 -- 类名(元类对象) 类方法 实例方法 表格是不精准.不完备…
目前手里有个测试项目各个feature的测试用例都放在对应的子目录下,虽然有自动化测试框架的帮助执行起来很方便,但是偶尔也有需要在本地执行某个feature的全部测试用例集合.因为本人对shell脚本不熟悉,所以Ruby的问题还是用Ruby来解决. 每个测试脚本的命名遵循如下规范:Testlink ID + 测试用例名字.比如100_invalid_signature.rb表示该测试用例在Testlink里的ID是100,用来测试无效签名.在脚本的实现中,测试用例的名字就对应为TC_100.例子…
一 对象模型 kernel Module Kernel.private_instance_methods.grep(/^pr/)   private method 1 如果一个方法接收者不是你自己,一定要指定一个接收者 2 私有方法 只能指定一个隐含接收者(可调超类的私有方法) 类本身是Class类的对象.类的名字是个常量 Class<Module,模块和类的名字扮演目录角色,按树形结构组织 include Module时 M被插入到祖先链中,在该类的正上方 二 方法 obj.send(:met…
Spell,也称pattern,idiom # Around Alias:从一个重新定义的方法中调用原始的,被重命名的版本. # old_reverse是未改变的原始方法,reverse/new_reverse是改变的方法. class String   def new_reverse     "x:#{old_reverse}"   end   alias_method :old_reverse, :reverse   alias_method :reverse, :new_reve…
yield yield self Proc yield带参数 rails中:yield 和 content_for methods.proc.lambda.block 闭包(用proc延长变量的生命周期) method_missing终止对祖先链(ancestors)的查找 p.puts.print 正则.字符相关特殊符号 Module 是 Class 的基类,但Module不能实例化,并且只能与类一同使用 异常 元编程 类打开,添加新方法,如何删减方法 创建单例方法 创建类方法 变量归属 se…
1. 认识unittest 什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误.在python语言下有诸多单元测试框架,如doctest.unittest.pytest.nose等,unittest框架(原名PyUnit框架)为Python语言自带的单元测试框架,Python 2.1及其以后的版本已将unittest作为一个标准模块放入Python开发包中,Python 3版本也一样. 1.1 认…