前几天看了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_methods = t.public_methods.grep(/^test_/) # 把所有test_开头的方法找出来。
test_methods.each do |test|
t.send(test) # 执行每个测试用例。
end

有兴趣的同学可以自己去考察一下Ruby单元测试框架的实现,不了解元编程的话可以参考Metaprogramming Ruby。

Ruby元编程:单元测试框架如何找到测试用例的更多相关文章

  1. 3-8《Ruby元编程》第二章对象模型

    <Ruby元编程> 第二章 对象模型 类定义揭秘inside class definitions: class关键字更像一个作用域操作符,核心作用是可以在里面随时定义方法. [].meth ...

  2. Ruby元编程:动态添加类属性及其实际应用

    上个星期测试道的Monkey老师和我聊到测试用例参数过多的问题,其实这样的问题在我这里也同样经历过.比如我的测试用例必须面对不同的测试环境,每个环境有无数的参数,开发的最初阶段,因为参数少,所以就放在 ...

  3. 3-11 《Ruby元编程》第4章block块 3-12

    第4章代码块blocks 基础知识 作用域:用代码块携带variables through scopes 通过传递block给instance_eval方法来控制作用域. 把block转换为Proc, ...

  4. 201707《Ruby元编程》

    元编程不过是编程--经典必读 作用域(绑定) 打破作用域门的方式 对象模型图 七条规则 法术手册 作用域(绑定) 改变作用域的关键字, 分别是module,class和def.我们称为作用域的门(sc ...

  5. Ruby元编程:执行某个目录下的全部测试用例

    目前手里有个测试项目各个feature的测试用例都放在对应的子目录下,虽然有自动化测试框架的帮助执行起来很方便,但是偶尔也有需要在本地执行某个feature的全部测试用例集合.因为本人对shell脚本 ...

  6. ruby 元编程

    一 对象模型 kernel Module Kernel.private_instance_methods.grep(/^pr/)   private method 1 如果一个方法接收者不是你自己,一 ...

  7. 3-18/19 (自我练习)30多个《Ruby元编程》的spell(pattern)小例子。

    Spell,也称pattern,idiom # Around Alias:从一个重新定义的方法中调用原始的,被重命名的版本. # old_reverse是未改变的原始方法,reverse/new_re ...

  8. 201706 Ruby 基础 & 元编程

    yield yield self Proc yield带参数 rails中:yield 和 content_for methods.proc.lambda.block 闭包(用proc延长变量的生命周 ...

  9. Selenium(十五):unittest单元测试框架(一) 初识unittest

    1. 认识unittest 什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误.在python语言下 ...

随机推荐

  1. matlab 编程的细节问题

    1. reshape 对元素的操作 使用单一维度对矩阵进行操作时,矩阵是逐列地进行编号的(如下矩阵中的 4, 5, 6,分别在矩阵 A 的第 4, 5, 6 索引处,而不是以行进行排序的 2,5,8 ...

  2. poj 3090 Visible Lattice Points 法利系列||通过计

    因为图像关于对角线对称.所以我们仅仅看下三角区域. 将x轴看做分母,被圈的点看成分子 依次是{1/2},{1/3,1/2},{1/4,3/4},{1/5,2/5,3/5,4/5} 写成前缀和的形式就是 ...

  3. Configuring a remote m-phy

    An interface for low power, high bandwidth communications between units in a device in provided here ...

  4. docker入门0:常识知识扫盲

    Docker 是一个开源项目,基于 Go 语言实现,是一套轻量级的操作系统虚拟化解决方案.用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单. Docker通常用于如下场景: web ...

  5. Matlab Tricks(二十九) —— 使用 deal 将多个输入赋值给多个输出

    deal:Distribute inputs to outputs: >> [id, name, data] = deal(123, 'zhang', randn(3)) 注意: [Y1, ...

  6. UVA 548(二进制重建和遍历)

    J - Tree Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Ap ...

  7. WinEdt && LaTex(三)—— 宏包

    amsmath:最常用的数学宏包 1. bm:bold math 数学字体加粗 \documentclass{article} \usepackage{bm} \begin{document} \[ ...

  8. CSRF 专题

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造.      也被称为:one click attack/session riding(一 ...

  9. C# PrintDocument 打印表格

    1.封装好的辅助类: using System; using System.Data; using System.Drawing; using System.Drawing.Printing; usi ...

  10. WCF配置文件详解

    今天来看看WCF的配置方法. 上图整理了服务配置过程中所用到的基本的元素,大致的步骤主要是首先要在调用服务的程序集中添加服务的一个引用,然后添加一个service并指定服务的名称.终结点,如果添加了b ...