44行写Ruby单元测试框架
作者:网络转载 发布时间:[ 2012/3/9 11:14:27 ] 推荐标签:
1 true.should == true
2 5.should == 5
每个对象都应当提供自己”should”函数,代码如下:
1 class Object
2 def should
3 self
4 end
5 end
这个函数并没有真正做什么工作(仅仅是返回对象本身);它仅仅是一个让测试读起来更好的语法。
在这个阶段,我们只是将测试计算的结构转换成一个字符串,表明测试结果通过或失败并输出。在这个过程中,我们会统计通过或失败的测试数量,所以可以在后给出一个总结报告。这是我们所需要的所有的代码,如果我们将他们放到一起,是下面的44行代码:
1 module Kernel
2 def describe(description, &block)
3 tests = Dsl.new.parse(description, block)
4 tests.execute
5 end
6 end
7 class Object
8 def should
9 self
10 end
11 end
12 class Dsl
13 def initialize
14 @tests = {}
15 end
16 def parse(description, block)
17 self.instance_eval(&block)
18 Executor.new(description, @tests)
19 end
20 def it(description, &block)
21 @tests[description] = block
22 end
23 end
24 class Executor
25 def initialize(description, tests)
26 @description = description
27 @tests = tests
28 @success_count = 0
29 @failure_count = 0
30 end
31 def execute
32 puts "#{@description}"
33 @tests.each_pair do |name, block|
34 print " - #{name}"
35 result = self.instance_eval(&block)
36 result ? @success_count += 1 : @failure_count += 1
37 puts result ? " SUCCESS" : " FAILURE"
38 end
39 summary
40 end
41 def summary
42 puts "
#{@tests.keys.size} tests, #{@success_count} success, #{@failure_count} failure"
43 end
44 end
如果我们“需要”使用这个框架执行初的那个测试,我们会得到下面输出结果:
some test
- should be true SUCCESS
- should show that an expression can be true SUCCESS
- should be failing deliberately FAILURE
3 tests, 2 success, 1 failure
太好了!现在,如果你因没有一个单元测试框架而烦恼并且不想莽撞地写代码,只要花上5分钟你可以得到一个能够助你一臂之力的测试框架。当然,这里有一些略微夸大;你很快会想到这里缺少额外的验证API、更好的输出、对象仿真和测试桩等等。然而,我们可以很容易的在精简的框架上扩展其中的一些功能(例如,增加额外的DSL元素)??只消花费很小的努力。如果你不相信我,可以看看bacon ,它只用了几百行代码完成了Rspec一个精简版。我编写的Attest测试框架是另一个很好的例子(这么说有自卖自夸的嫌疑:P)。这两者都缺少任何内建的test double 支持,我会在另外一个时间讨论如何添加test double支持。
译注:Test Double:在对象编程中“自动化单元测试”的专业术语,涵盖的类型有Test Stub(测试桩)、Mock Object、Test Spy、Fake Object和Dummy Object。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11