2009-03-19 7 views
9

मैं परीक्षण स्क्रिप्ट उत्पन्न करने के लिए ककड़ी का उपयोग कर रहा हूं जिसे किसी उपकरण या मानव द्वारा निष्पादित किया जा सकता है ... इसलिए मानक उपयोग नहीं।मैं ककड़ी में परिदृश्य और उदाहरण नामों का उपयोग कैसे कर सकता हूं?

हालांकि मैं अपने आउटपुट के माध्यम से परिदृश्य और उदाहरण नामों से गुज़रना चाहता हूं।

क्या यह संभव है?

+0

मैं समाधान की तरह कर इससे पहले कि कुछ होने की उम्मीद कर रहा हूं | परिदृश्य | परिदृश्य.नाम अंत लेकिन इसमें कोई नाम विधि नहीं है और परिदृश्य वस्तु एक ककड़ी :: एस्ट :: आउटलाइनटेबल :: उदाहरण कैल्स मेरे मामले में प्रतीत होता है क्योंकि मैं परिदृश्य आउटलाइन –

उत्तर

8

.. यह मिला

Before do |scenario| 
puts "Before Scenario: #{scenario.to_sexp[2]}" 
. 
. 
. 
end 

आपका SExpression भिन्न हो सकती है (टिम वाकर से कुछ मदद के साथ), इसलिए यह एक scenario.to_sexp.inspect कर देखने के लिए कि पेड़ है लायक है।

असलक अपने वर्गों पर संपत्तियों को उजागर करने से बचने के लिए उत्सुक है (जो एक निर्णय है जिसके साथ मैं सहमत हूं, इसलिए मुझे यह काम करने में खुशी है)।

+2

'scenario.name' ककड़ी के मौजूदा संस्करणों पर ठीक काम करता प्रतीत होता है। – jpatokal

2

एक और गंभीर उत्तर (या कम से कम, सुझाव): आप जो खोज रहे हैं उसे ढूंढने के लिए रूबी के प्रतिबिंब का उपयोग करें। संभावित वस्तुओं को पकड़ो, पता लगाएं कि उनके पास कौन सी विधियां हैं, और देखें कि आप इसे पा सकते हैं या नहीं। उदाहरण के लिए:

File.open('happy_hunting.log','a') { |f| 
    f.print "Scenario supports: #{(scenario.methods - Object.methods).inspect}\n" 
    } 

और फिर यह पता लगाने के लिए दोहराएं कि यह कहां है।

एक और सुझाव, स्रोत को देखें।

+0

का उपयोग कर रहा हूं जो काम नहीं करता है क्योंकि परिदृश्य के भीतर कोई परिदृश्य वस्तु उपलब्ध नहीं है - जब तक कि आप इसे पहले ब्लॉक के साथ कैप्चर न करें, जैसा कि निगेल के उत्तर में दिखाया गया है। – jpatokal

0

मैंने कुछ ख़राब किया। चूंकि मैं केवल डीबगिंग के लिए इस जानकारी का उपयोग करता हूं, यह अब तक काम करेगा, जब तक कि मुझे कुछ बेहतर न लगे।

@Before 
public void printTestInfoBeforeScenario(Scenario scenario) { 
    LOGGER.info("Upcoming Test: "+scenario.getSourceTagNames()); 
} 

@After 
public void printTestInfoAfterScenario(Scenario scenario) { 
    LOGGER.info("Test Complete: " + scenario.getSourceTagNames() + " Status: " + scenario.getStatus()); 
} 
संबंधित मुद्दे