2011-09-12 76 views
0

我正在實施一個簡單的策略模式(第一次在ruby中),我想寫一個測試以確保每個子類都實現關鍵策略方法。所以,我有這樣的事情:測試以驗證ruby子類實施策略方法

class SearchTools::MusicSearcher 
    def find_artists 
    raise 'Abstract method called' 
    end 
end 

class SearchTools::LastFMSearcher < MusicSearcher 
    def find_artists(search_phrase) 
    # get artists from lastfm's restful api 
    end 
end 

class SearchTools::DatabaseSearcher < MusicSearcher 
    def find_artists(search_phrase) 
    # look in database for artists 
    end 
end 

class SearchTools::Search 

    def initialize(searcher) 
    @searcher = searcher 
    end 

    def find_artists(search_phrase) 
    @searcher.find_artists(search_phrase) 
    end 

end 

我目前正在使用rspec,factory_girl和shoulda-matchers進行測試。任何人都知道我如何實現這一目標

乾杯!

P.S.我習慣於用C#指定一個字面的'接口',所以這就是爲什麼我要看看我可以在Ruby中使用什麼來爲每個策略實施一個通用接口...

+0

使用'respond_to?'? –

+0

感謝Dave的迴應。 respond_to看起來不錯......但如何將該測試應用到我的抽象MusicSearcher的任何子類? – Stu

+0

http://snippets.dzone.com/posts/show/2992 –

回答

0

我期望它是例如,

it "should respond to find_artists method" do 
    o = SearchTools::LastFMSearcher.new 
    o.respond_to?(:find_artists).should be_true 
end