Cucumber其他问题集
"\#{}”和"#{}”的区别:
"\#{}"是显示字符串#{}, 如果不加\则什么都不显示.
原因是#{}会自动进行运算, 然后把运算结果替换掉#{}. 加了\就不会自动运算和替换
----------------------------------------------------
ruby中”=>"是什么意思:
如果是对数组赋值,下标 => 值
例如 a = {1 => "1",2 => "22"}
a "1"
a "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 :origin # 原点
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指对象本身,返回的是类,打印出来就相当于类名。静态方法的调用就是类名加方法
——————————————————
页:
[1]