2011-08-08 3 views
1

APIを作成しておいしい霜付けケーキを作っているとします。これはすばらしいことですが、文書化されていますが、時にはエラーが発生する場合があります。また、ユーザーがIRB経由でライブラリを探索していて、プロトタイピング中に変数を指差したことがあります。rspec-expectations gemを使用してAPIの引数を検証する

これは、私は通常、パラメータがnilであってはならないことを発信者に知らせる方法/他の制約がありますされています

# Cake.rb 
def make_cake(cake_type, *arguments) 
    raise "cake_type required!" unless !cake_type.nil? 
    raise "cake_type must be in KNOWN_CAKES" unless KNOWN_CAKES.include?(cake_type) 
    # blah blah blah 
end 

しかし、私は最近rspec-expectations宝石を使用して、このような何かを検討してきました

# Cake.rb 
include RSpec::Matchers 
def make_cake(cake_type, *arguments) 
    cake_type.should_not be_nil, "cake_type required" 
    KNOWN_CAKES.should include(cake_type), "cake_type not found" 
end 

長所:

  • 簡潔なDSLはそれ人々が開発のための本当の簡単な読み取りますAPIに対抗します
  • RSpec :: Expectations :: ExpectationNotMetErrorには、予期した値と実際に受け取った値を与える優れた例外書式があります。

CON(S?):

  • RSpecの::期待:: ExpectationNotMetErrorは少しすぎ冗長かもしれません。

だから、このアプローチ:良いアイデア、または悪いアイデア?どのような設計原則に違反していますか?

答えて

0

呼び出し元として、API呼び出しからRSpec例外を返すのは驚きです。

本当に多くは得られますか? raise 'cake type required!' if cake_type.nil?に変更するとどうなりますか?私の元のコードよりもはっきりと読んでいるようです。おそらく、あなたはそれを書いて、unlessの両方の時間を使用するでしょうか?

期待された/受け取った値を、単に自分自身の例外クラスを使って、より良いメッセージを上げるだけで返すという目標を達成できませんでしたか?

関連する問題