2011-11-22 61 views
2

我有一個Ruby文件來生成測試結果報告。我已經定義了很多變量,如測試用例名稱,版本號,然後是模塊1結果,然後是模塊2結果和最終結果。如何逐個調用函數參數

現在我把它作爲一個參數作爲所有變量的函數。另一個Ruby文件需要逐個調用參數。在Testcase.rb開始的意思是,我將編寫testcase name = Test1;然後版本號爲0.1。然後,當模塊1運行時,我將更新結果爲pass或fail,然後類似地爲module2。但我不知道如何一次調用一個參數。

這些是我的report.rb = tc_name,版本,測試人員,login_result,checkout_result,signout_result中的變量。

在我的測試案例中,我必須逐個傳遞值。請幫忙。

+0

你使用的是Ruby 1.8還是Ruby 1.9? (答案因Ruby內置的功能而異。) – Phrogz

回答

2

這個想法被稱爲'currying'。
谷歌搜索'紅寶石咖喱'會給你很多點擊。
查看this SO answer的一些例子。

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(!) 
+0

感謝您的回覆。我會粘貼我的代碼聽到。如果你可以給出一個簡單或小概念如何通過變量調用變量,它將是如此的偉大。 – harismahesh

相關問題