2010-02-14 3 views
5

तो मैं सामान्य रूप से रूबी के लिए बिल्कुल नया हूं, और मैं जो वस्तु बना रहा हूं उसके लिए मैं कुछ आरएसपीईसी परीक्षण मामलों को लिख रहा हूं। परीक्षण के बहुत सारे मामले काफी बुनियादी हैं और मैं सिर्फ यह सुनिश्चित करना चाहता हूं कि मूल्यों को जनसंख्या में लाया जा रहा है और ठीक से लौटाया गया है। मैं सोच रहा हूं कि लूपिंग निर्माण के साथ ऐसा करने का कोई तरीका है या नहीं। प्रत्येक विधि के लिए एक assertEquals होने के बजाय मैं परीक्षण करना चाहता हूँ।रूबी में स्ट्रिंग से मनमानी ऑब्जेक्ट विधि कैसे चलाएं?

instace के लिए:

describe item, "Testing the Item" do 

    it "will have a null value to start" do 
    item = Item.new 
    # Here I could do the item.name.should be_nil 
    # then I could do item.category.should be_nil 
    end 

end 

लेकिन मैं किसी तरह एक सरणी का उपयोग करने की जांच करने के गुण के सभी निर्धारित करने के लिए चाहते हैं। तो मैं

propertyArray.each do |property| 
    item.#{property}.should be_nil 
end 

ऐसा कुछ या ऐसा कुछ कर सकता है? किसी भी मदद/सुझाव के लिए धन्यवाद।

उत्तर

6

object.send(:method_name) या object.send("method_name") काम करेगा।

तो अपने मामले में

propertyArray.each do |property| 
    item.send(property).should be_nil 
end 

आप क्या चाहते हैं क्या करना चाहिए।

+0

धन्यवाद! मुझे पता था कि ऐसा करने का एक तरीका होना था। – Boushley

1

आप एक ही कल्पना उदाहरण के भीतर

propertyArray.each do |property| 
    item.send(property).should be_nil 
end 

करते हैं और अगर आपके कल्पना तो विफल रहता है यह डिबग जो विशेषता नहीं के बराबर नहीं है या क्या नाकाम रही है करने के लिए कठिन हो जाएगा। यह करने के लिए एक बेहतर तरीका की तरह

describe item, "Testing the Item" do 

    before(:each) do 
    @item = Item.new 
    end 

    propertyArray.each do |property| 

    it "should have a null value for #{property} to start" do 
     @item.send(property).should be_nil 
    end 

    end 

end 

यह प्रत्येक विशेषता के लिए एक अलग कल्पना उदाहरण बनाने के लिए प्रत्येक संपत्ति के लिए एक अलग कल्पना उदाहरण के रूप में अपने कल्पना चलेंगे है और अगर यह विफल रहता है तो आप को पता चलेगा कि कौन से नाकाम रही है। यह प्रति परीक्षण/spec उदाहरण के एक दावे के नियम का भी पालन करता है।

1

Object#send() के बारे में एक जोड़े को अंक ...

आप विधि कॉल के लिए भी पैरामीटर निर्दिष्ट कर सकते हैं ...

an_object.send(:a_method, 'A param', 'Another param') 

मैं इस अन्य रूप __send__ का उपयोग करना चाहते क्योंकि "भेजें" इतना आम है ...

an_object.__send__(:a_method)