2016-05-25 1 views
2

TDDの実践の一部は、最も単純で縮退したケースをテストすることから始まり、エッジからのコア機能を緩和することです。私はすべての公共のポイ捨てのアイデアを好きではないTDD、Ruby、&nil引き数を処理する

def my_method(arg) 
    if arg.nil? 
    do_the_thing 
    return 
    end 

    do_the_real_thing 
end 

:私はRubyで働いているので、私は非常に多くの場合、自分はこのようにテストを書く見つける:

it "does the thing if given nil" do 
    expect { my_method(nil) }.to do_the_thing 
end 

と、このような生産コードこのようなガード節を持つメソッドではありますが、Rubyの動的性質を考えると、どこに線を引いていますか?有効な引数を渡す責任を呼び出しコードに置くことは妥当ですか?

私は、過度に守備的なコードでは散らばらない、集中的で表現力豊かな方法を書いていますが、堅牢で正確なシステムを構築したいと考えています。

エッジケースから私に訴えかける習慣ですが、この特定のエッジケースをどのように扱うべきかはよく分かりません。

+0

@sawa私の質問は、テストが推進しているデザインの側面についてです。 – ivan

+0

パラメータにデフォルト値を使用できますか?それはメソッドに渡される 'nil'を回避するのに役立ちます –

+0

多くの同様の防衛コードスニペットを持っているなら、たぶんあなたはTDDの** refactor **の部分を見逃しました。 – Aetherus

答えて

0

私はあなたのコードを書くためにどのように守るべきかは、合理的なの状況がどのような状況であるかによって決まると考えています。

あなた自身に尋ねる質問は、この状態が通常のイベントの過程で発生すると仮定することがどれほど合理的かということです。

イベントの通常の過程で、エラーが発生する可能性がある場合は、それに応じてコード化するのが合理的です。

イベントの通常の過程で、エラー状態にならない場合、私はチェック条件を入れません。エラー状態が発生した場合、アプリケーションに致命的なエラーが発生し、根本的に何かが間違っているため、動作を停止するほうがよいです。

たとえば、フォーム内の事前定義リストから選択した国名をパラメータとして受け入れるメソッドがあるとします。メソッドが有効な国名を取得すると仮定するのは合理的です。このメソッドが(有効な国名ではない文字列をチェックするなど)これを正気チェックする理由はありません。

もう1つの例では、データソースの品質が悪いことがわかっているデータベースソースのパラメータを扱う方法があるとします。この状況では、パラメータがメソッドが予期しているものであることを確認することが妥当である。

過度に守備的なコードを書くと、実際にはいくつかの問題が隠されることがあります。私は完全に不合理なものをチェックし、問題をログに記録し、次に実行を続けるコードを書いています。これらのアプリケーションは、実際に対処すべきコーディングの問題を隠しているため、通常は予測できない動作をします。

関連する問題