describe '异常测试' do
# 这里的before hook就只能作用在'异常测试'describe之内了 before(:each) do echo '--- 准备一盏全新台灯 ---' end describe '破坏性测试' do it '榔头砸不坏' do echo '榔头砸不坏' end it '泡水里不短路' do echo '泡水里不短路' end end describe '耐久性测试' do it '连续使用七天七夜不灭' do echo '连续使用七天七夜不灭' end it '风吹雨打也不能阻止我发光' do # 对于未完成的用例 可以先把描述写下来 具体的用例里面使用pending关键字占位 pending '这个用例待完成' end end end end |
再看一下运行结果报表,两相对照,用例的树状结构一目了然
用例命名简单化,且有实际含义
之前写用例,用例命名是一个十分关键但也很头疼的工作,大家懂得
而Rspec本质上是一门 DSL (Domain Specific Language),实际上,从上面的示例代码和运行结果截屏中大家已经可以看到,在Rspec中是无须给测试用例命名的,或者说,用例的命名可以非常书面化,一般就是用例意图的简单描述(即:describe及it关键字后面跟着的描述性语句)
支持未完成的用例先占位
不解释,还是看图
对于未完成的用例,可以先把描述写下来,具体的用例步骤里面使用pending关键字占位
it '风吹雨打也不能阻止我发光' do
# 对于未完成的用例 可以先把描述写下来 具体的用例里面使用pending关键字占位
pending '这个用例待完成'
end
反映在用例报表中,这个用例就被标志为黄色了 树状的用例组织结构/用例命名简单化/支持未完成的用例先占位,这三个特性使得使用Rspec编写测试用例时,思路可以非常自由,开阔,很像是在写 markdown ,来不及的地方,也可以先使用 pending 占位
写完以后,跑一遍用例,生成的html报表可读性很强,可以直接用于策划,开发,测试之间的沟通(必杀技,有木有!)
其它不错的特性
Rspec是一门DSL,但它仍旧支持在用例中参杂原生Ruby代码,如下所示
Rspec与TestNG/JUnit一样,也有类似before/after的hook(如下所示),其作用范围是当前的describe
由于describe允许层层嵌套,因此,Rspec中的before/after的作用域也是层层嵌套的,比之TestNG的Before/After,灵活性大大超过
describe 'PHILIPS台灯 - 出厂质检' do
# Rspec是一门测试DSL 但其中可以夹杂原生Ruby代码 比如这个echo()函数 def echo(input) puts input end # Rspec与TestNG/JUnit一样 也有类似before/after的hook # 其作用范围为其所在的describe # before在it语句块之前执行 before(:each) do echo '--- 开始本次测试 ---' end # after在it语句块之后执行 after(:each) do echo "--- 结束本次测试 ---\n\n" end |