我正在实现一个简单的策略模式(在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 :(得分:0)
我希望它会像,
it "should respond to find_artists method" do
o = SearchTools::LastFMSearcher.new
o.respond_to?(:find_artists).should be_true
end