我有一个Ruby文件来生成测试结果报告。在那里我定义了很多变量,比如测试用例名称,版本号,然后是module1结果,然后是模块2结果和最终结果。
现在我把它作为一个带有参数的函数作为所有变量。另一个Ruby文件需要逐个调用参数。意思是在Testcase.rb的启动时,我将编写testcase name = Test1;然后版本号为0.1。然后当module1运行时,我会将结果更新为pass或fail,然后类似于module2。但我不知道如何一次调用一个参数。
这些是我报告中的变量.rb = tc_name,version,tester,login_result,checkout_result,signout_result。
在我的测试用例中,我必须逐个传递值。请帮忙。
答案 0 :(得分:2)
这个想法叫做“currying”
谷歌搜索'红宝石currying'将给你很多点击。
查看this SO answer了解一些示例。
答案 1 :(得分:1)
如果你有Ruby 1.9,也许这符合你的需求:
report = ->(tc_name, version, tester, login_result, checkout_result) do
puts <<-ENDOUTPUT
Test Case: #{tc_name}
Version: #{version}
Tester: #{tester}
Login Res: #{login_result}
Checkout Res: #{checkout_result}
ENDOUTPUT
end
test1 = report.curry["Test1"]
v12 = test1["v1.2"]
me12 = v12["Phrogz"]
me12["Success"]["Failed"]
#=> Test Case: Test1
#=> Version: v1.2
#=> Tester: Phrogz
#=> Login Res: Success
#=> Checkout Res: Failed
v13 = test1["v1.3"]
me13 = v13["Phrogz"]
me13["Success"]["Success"]
#=> Test Case: Test1
#=> Version: v1.3
#=> Tester: Phrogz
#=> Login Res: Success
#=> Checkout Res: Success
或者(也许不那么容易混淆)你可以改为跟踪密钥的散列。一旦累积了所需的所有密钥,就可以对它们做一些事情;否则你只需将任何新数据合并到哈希中并将其传回。这提供了与上述相同的部分应用程序优势,并且还允许您以任何顺序累积变量:
def report(data={},more={})
data = data.merge(more)
if data.key?(:tc_name) && data.key?(:version) && data.key?(:tester) &&
data.key?(:login_result) && data.key?(:checkout_result)
puts <<-ENDOUTPUT
Test Case: #{data[:tc_name]}
Version: #{data[:version]}
Tester: #{data[:tester]}
Login Res: #{data[:login_result]}
Checkout Res: #{data[:checkout_result]}
ENDOUTPUT
else
data # send the newly-merged data back to the user
end
end
test1 = report tc_name:"Test1"
me = report test1, tester:"Phrogz"
v12 = report me, version:"v1.2"
report v12, login_result:"Success", checkout_result:"Failed"
#=> Test Case: Test1
#=> Version: v1.2
#=> Tester: Phrogz
#=> Login Res: Success
#=> Checkout Res: Failed
v13 = report me, version:"v1.3"
report v13, login_result:"Success", checkout_result:"Success"
#=> Test Case: Test1
#=> Version: v1.3
#=> Tester: Phrogz
#=> Login Res: Success
#=> Checkout Res: Success
但是,函数不需要合并值和累积数据。你可以用简单的哈希自己做到这一点:
BAD_LOGIN = { login_result:"FAILED" }
ALL_GOOD = { login_result:"OK", checkout_result:"OK" }
ME = { tester:"Phrogz" }
def report(data)
puts <<-ENDOUTPUT
Test Case: #{data[:tc_name]}
Tester: #{data[:tester]}
Login Res: #{data[:login_result]}
Checkout Res: #{data[:checkout_result]}
ENDOUTPUT
end
report ME.merge(tc_name:"Test1").merge(BAD_LOGIN)
#=> Test Case: Test1
#=> Tester: Phrogz
#=> Login Res: FAILED
#=> Checkout Res:
ok = {tc_name:"Test2"}.merge(ME).merge(ALL_GOOD)
report ok
#=> Test Case: Test2
#=> Tester: Phrogz
#=> Login Res: OK
#=> Checkout Res: OK
report ok.merge( checkout_result:"CAUGHT FIRE(!)" )
#=> Test Case: Test2
#=> Tester: Phrogz
#=> Login Res: OK
#=> Checkout Res: CAUGHT FIRE(!)