2011-01-18 11 views
5

मेरे पास एक संदेश वर्ग है, जिसे कन्स्ट्रक्टर में तर्क पारित करके, या कोई तर्क पारित करके और बाद में एक्सेसर्स के साथ विशेषताओं को सेट करके प्रारंभ किया जा सकता है। गुणों के सेटटर विधियों में कुछ प्री-प्रोसेसिंग चल रही है।मैं आरएसपीसी के साथ व्यवहार शुरू करने पर कैसे जोर दे सकता हूं?

मेरे पास ऐसे परीक्षण हैं जो सेटर विधियों को जो कुछ भी करना चाहते हैं, सुनिश्चित करते हैं, लेकिन मुझे लगता है कि प्रारंभिक विधि वास्तव में सेटर्स को कॉल करने का एक अच्छा तरीका नहीं लग रहा है।

class Message 
    attr_accessor :body 
    attr_accessor :recipients 
    attr_accessor :options 

    def initialize(message=nil, recipients=nil, options=nil) 
    self.body = message if message 
    self.recipients = recipients if recipients 
    self.options = options if options 
    end 

    def body=(body) 
    @body = body.strip_html 
    end 
    def recipients=(recipients) 
    @recipients = [] 
    [*recipients].each do |recipient| 
     self.add_recipient(recipient) 
    end 
    end 
end 
+0

संभव यहाँ मार्गदर्शन: http://stackoverflow.com/questions/316294/rspec-how-to-stub-an-instance-method-called-by-constructor –

उत्तर

4

मैं प्रारंभकर्ता के व्यवहार का परीक्षण करने के लिए करते हैं जाएगा,

अर्थात कि अपनी स्थापना के चर आप कैसे उम्मीद करेंगे।

इस बात की वास्तविकता में पकड़ा नहीं जा रहा है कि आप इसे कैसे करते हैं, मान लें कि अंतर्निहित एक्सेसर्स काम करते हैं, या वैकल्पिक रूप से यदि आप चाहें तो आवृत्ति चर सेट कर सकते हैं। यह लगभग एक अच्छा पुराने फैशन इकाई परीक्षण है।

उदा।

describe "initialize" do 
    let(:body) { "some text" } 
    let(:people) { ["Mr Bob","Mr Man"] } 
    let(:my_options) { { :opts => "are here" } } 

    subject { Message.new body, people, my_options } 

    its(:message) { should == body } 
    its(:recipients) { should == people } 
    its(:options) { should == my_options } 
end 
+0

मैं शायद लगता है कि मेरी उदाहरण कोड 'isn मैं जो करना चाहता हूं उसका चित्रण, मैं बेहतर व्याख्या करने के लिए इसे संपादित करूंगा - बिंदु यह है कि सेटर विधियां केवल मूल्य को संग्रहित नहीं करती हैं। मैं ऐसे परीक्षण करना चाहता हूं जो सेटर विधियों के सभी किनारे मामलों का परीक्षण करें, और फिर एक परीक्षण जो मुझे बताता है कि प्रारंभकर्ता उनका उपयोग कर रहा है, इसलिए मुझे परीक्षण मामलों को डुप्लिकेट करने की आवश्यकता नहीं है। – Glenjamin

+0

वास्तव में आपका परीक्षण एक निजी विधि क्या है। आपको "संदेश पर शुरूआत क्या है" के विरोध में "इन तर्कों के साथ संदेश बनाते समय क्या होता है" के साथ आपको केवल परेशान होना चाहिए। इस तरह आपका कार्यान्वयन बदलने के लिए खुला है, जबकि परीक्षण एक ही रह सकते हैं। –

संबंधित मुद्दे