44行写Ruby单元测试框架
作者:网络转载 发布时间:[ 2012/3/27 10:36:28 ] 推荐标签:
在describe block中,”it”函数会为每个”it” block调用一次。每次调用时,会把输入的block以测试描述作为键值存储在哈希表中。完成这些以后,我们只要创建一个Executor对象,可以对我们所有的测试block进行迭代,调用它们并产生执行结果。Executor代码如下:
class Executor
def initialize(description, tests)
@description = description
@tests = tests
@success_count = 0
@failure_count = 0
end
def execute
puts "#{@description}"
@tests.each_pair do |name, block|
print " - #{name}"
result = self.instance_eval(&block)
result ? @success_count += 1 : @failure_count += 1
puts result ? " SUCCESS" : " FAILURE"
end
summary
end
def summary
puts "
#{@tests.keys.size} tests, #{@success_count} success, #{@failure_count} failure"
end
我们的executor代码非常简单。输出”describe” block的描述,然后遍历所有存储的”it” block并且在executor对象中执行它们。这么处理没有什么特别原因,但这意味着executor对象同样也可以包含其他函数,并且可以在”it” block中作为一种“语言”来使用(比如,我们dsl的一部分可以定义为executor的一个函数)。譬如,我们可以在executor上定义下列函数:
def should_be_five(x)
5 == x
end
这个函数同样可以在”it” block内部使用,但对于我们这个简单的测试没有这个必要。
所以,”it” block会计算并存储结果,通常结果只是”it” block后一个语句的返回值(按照常规的Ruby)。这里,我们希望确保后一个语句总是返回一个布尔值(标明测试通过或失败),通过它我们可以输出一些有意义提示。
我们还差后一步,”should”函数代码如下:
true.should == true
5.should == 5
每个对象都应当提供自己”should”函数,代码如下:
class Object
def should
self
end
end
这个函数并没有真正做什么工作(仅仅是返回对象本身);它仅仅是一个让测试读起来更好的语法。
相关推荐
更新发布
功能测试和接口测试的区别
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