51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1972|回复: 0
打印 上一主题 下一主题

Cucumber其他问题集

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2015-6-16 15:57:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

"\#{}”和"#{}”的区别:
"\#{}"是显示字符串#{}, 如果不加\则什么都不显示.
原因是#{}会自动进行运算, 然后把运算结果替换掉#{}. 加了\就不会自动运算和替换
----------------------------------------------------
ruby中”=>"是什么意思:
如果是对数组赋值,下标 => 值
例如 a = {1 => "1",2 => "22"}
a[1] "1"
a[2] "22 "
----------------------------------------------------
%{. ,  : ;}!在ruby中是什么意思:
%   # 取余运算,如8%3=2
{}   #可用在输出,如输出y的值:puts"#{y}",也可用在Hash表如 $R_Key_Hash = {}  
. #一般表示某种属性或方法,如对于一个窗口,self.x = 0 表示这个窗口的x坐标为0.
又如
Class Person
def Hello
puts "Hello,my name is Tom."
end
end
p=Person.new
p.Hello     #执行这个程序就会输出 Hello,my name is Tom.

,  #逗号在数组中较常见,如a = ["1","2","3"],数组a的三个元素依次是1,2,3
‘   #这个在对文件的操作比较常见,如下例:
if Dir.glob('txt').size == 0  #如果文件夹txt不存在
Dir.mkdir('./txt’)  #那么生成一个名字叫txt的文件夹
end
!  # 表示 非 如 if x != 2 表示如果x不等于2
:  #这个可能用在属性里
如:
class Game_Picture
attr_reader :number # 图片编号
attr_reader rigin # 原点
attr_reader :x # X 坐标
attr_reader :y # Y 坐标
attr_reader :tone # 色调
attr_reader :angle # 旋转角度
end
; #分号的话,一般是写程序每行结束才用到,但其实ruby的每行结束是可以不用分号的,回车换行就行,我也只是在用Interactive Ruby编译器时才会用分号

----------------------------------------------------

$1.to_i 是什么意思 ?# 正则表达式捕获的第一个内容转换成整数型

----------------------------------------------------
to_s,to_str 的区别:

to_s:是表示把一个对象的字符串状态呈现出来,不管结果如何。只要得到字符串的状态。
所以普通对象一般to _s后都是这样"# < A:0x9c5ce8 >",几乎没有意义。

to_str:一般对象是没有定义to_str的,如果定义了就表示这个对象能完美的呈现字符串状态(比如Path对象,Rails.env),在与字符串做相关操作(join / gsub/ <<等),就会优先调用to_str。

#简单理解就是:定义了to_str就像一个对象贴上这样的标签:“我是一个字符串噢!字符串们我们可以一起玩耍啊”而定义了to_s就表示“实在没有办法了你也可以把我变成字符串。至于会变成什么样子鬼知道呢!”

----------------------------------------------------

inspect和to_s的区别就是

puts obj ==> puts obj.to_s
p obj ==> puts obj.inspect

----------------------------------------------------

Ruby中的p和puts的使用区别浅析
p 和 puts 是 Ruby 中特别常用的方法,很多童鞋可能认为它们是差不多的,使用的时候也不加注意,但是仔细考究起来,它们是有明显差别的
先举一个例子:
class Foo
        def inspect
        “foo from inspect”
        end
        def to_s
        “foo from to_s”
        end
        foo=Foo.new
p foo
puts foo
p”p:<#{foo}>”
puts”p<#{foo}>”

这段代码的输出是:
foo from inspect

foo from to_s

p: <foo from to_s>

puts: <foo from to_s>

p obj 相当于 puts obj.inspect,而 puts obj 相当于 puts obj.to_s, 使用的方便是明显区别的,p 是使用 obj 的 inspect 方法,而 puts 是 to_s 方法。
为什么会这样呢?这个我想可以从 to_s 和 inspect 的区别说起,to_s 是对象的字符串表示, 是 puts 和双引号字符使用的方法。inspect 是对象状态的表示,通用用于 debug 中。 Object 中的定义了 to_s 和 inspect 方法,默认都是返回对象的类名和地址。
所以p 和 puts主要是用途的不同,p 是作为 debug 输出,而 puts 作为对象的字符串表示输出。
另外值得一提的是,在 irb console 中,命令行中表达式求值,使用的是 p 对象的 inspect 方法。另外,通常 debug 输出命令,也是使用对象的 inspect 方法
----------------------------------------------------

用Cucumber来写一个非常简单的单元测试。 定义一个需要测试的Calculator类如下:

classCalculator
def add num1, num2
num1+num2
end
end
  用于测试Calculator类的add方法的feature文件如下:
Feature: Unit testforCalculator
Scenario: Add two numbers
Given I have a calculator created
WhenI add '3' and '5'
ThenI should get the result of '8'
    对应的step文件为:

1require File.join(File.dirname(__FILE__), "../calculator")
2require 'rspec'
3
4Given /^I have a calculator created$/do
5@calculator = Calculator.new #新建一个@calculator实例变量
6end
7
8When/^I add '([^"]*)' and '([^"]*)'$/do|num1, num2|#捕捉2个参数
9@result = @calculator.add(num1.to_i, num2.to_i)#完成两个数相加(3+5)
10end
11
12Then/^I should get the result of '([^"]*)'$/ do |expected_result|
13@result.should == expected_result.to_i#t转为整数型展示
14end

    在以上的step文件中,第1,2行分别require了自定义的Calculator类和rspec(用于assertion,参考第13行的“should”), 第5行新建了一个@calculator实例变量,第9行完成两个数相加(3+5),第13行为测试断言。运行cucumber命令,输出结果如下:

1Feature: Unit testforCalculator
2
3Scenario: Add two numbers             # features/Calculator.feature:4
4Given I have a calculator created   # features/step_definitions/calculator_step.rb:4
5WhenI add '3' and '5'              # features/step_definitions/calculator_step.rb:8
6ThenI should get the result of '8' # features/step_definitions/calculator_step.rb:12
7
81 scenario (1 passed)
93 steps (3 passed)
100m0.002s
---------------------------------------------------------------------------
self与self class用法上的区别
self指对象本身,[self class]返回的是类,打印出来就相当于类名。静态方法的调用就是类名加方法
——————————————————























分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 10:56 , Processed in 0.067063 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表