2011-01-18 16 views
5

Yapımcıya argümanlar ileterek veya bağımsız değişkenler ileterek ve sonra öznitelikleri daha sonra erişimcilerle ayarlayarak başlatılabilen bir ileti sınıfım var. Özniteliklerin ayarlayıcı yöntemlerinde bazı ön işleme devam ediyor.RSpec ile başlatma davranışını nasıl doğrulayabilirim?

Setter yöntemlerinin, yapmaları gerekenleri yapmasını sağlayan testlerim var, ancak başlangıç ​​yönteminin gerçekten ayarlayıcıları çağırdığını test etmenin iyi bir yolunu anlayamıyorum.

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

Olası rehberlik: http://stackoverflow.com/questions/316294/rspec-how-to-stub-an-instance-method-called-by-constructor –

cevap

4

Ben başlatıcısı davranışını test etmek eğiliminde olacaktır,

yani o onun kurulum beklediğiniz nasıl değişkenleri.

Nasıl yapılacağının gerçekliğini yakalamıyorsanız, temel erişim sağlayanların çalıştığını varsayalım ya da isterseniz örnek değişkenlerini ayarlayabilirsiniz. Neredeyse eski moda bir birim testi.

örn. Burada

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

Ben 'benim kod örneği değil mi belki düşünmek Ne yapmak istediğimi açıklamak, daha iyi açıklamak için onu düzenleyeceğim - nokta, setter metotlarının değeri sadece saklamamasıdır. Setter yöntemlerinin tüm kenar durumlarını test eden testlere ve daha sonra test cihazını kopyalamak zorunda olmadığım için başlatıcının bunları kullandığını gösteren bir test yaptırmak istiyorum. – Glenjamin

+0

Gerçekten testleriniz özel bir yöntemdir. "İletide ne başlatıyor" ifadesinin tersine sadece "bu hatalarla bir ileti oluşturduğumda ne olur" diye rahatsız olmalısınız. Bu şekilde, uygulamanız değişmeye açıkken, testler aynı kalabiliyor. –

İlgili konular