2012-01-08 1 views
0

これは単体テストに関する私の質問の1つです。スタブを含むユニットテストクラス。常に正しい値を返すようにスタブを構成する必要がありますか?

私はThe Art Of Unit Testingを読んでいます.3章では、1つ以上のクラス間の依存関係を削除する方法を示します。それは私には明らかです。絶対に明白ではない点は、次の点です。

スタブを使用してテストメソッドを構成するとき、特定の値を返すように構成します。次に、テストされたメソッドを、テストされたクラスで公開します。このメソッドは、いくつかのロジックを実行し、スタブの戻り値を使用します。問題は、スタブが誤った値を返すように設定されていると、テストが失敗する可能性があるということです。

私はスタブを使用するとき、常にそれらを期待値を返すように構成する必要がありますか?私の意見では、これは、スタブが常に期待値を返すかのようにテストする正しい方法でなければなりません。テストされたメソッド内のロジックのみをテストします。

あなたはこれについてどう思いますか?スタブが正しい値を返さないようにする何らかの感覚がありますか?

どうもありがとう、 マルコ

答えて

2

あなたはSUT(テスト対象システム)は、いくつかの条件の下でどのように動作するかテストしている:=

  • 良いパスを良い値を返すスタブを構成し、SUTはそれに応じて
  • 悲しいが動作することをテストパスがのスタブを間違っての値に設定し、sutがのような場合にはを処理できることを確認してください(例:nUnitを使用している場合はExpectedException属性を使用してExceptionをスローすることがテストできます)
+0

ああ、それは私が受け取りたいと思っていた答えです!本当にありがとう! – Marconline

+0

私は別の質問をしました。ファイルに 'ext'拡張子がある場合はTrueを返し、それ以外の場合はfalseを返すスタブがあるとします。テスト中のメソッドは、そのメソッドを有効なエクステンションで呼び出しますが、スタブはfalseを返すように設定されています(つまり、悲しいパスをテストしています)。私の方法を改善し、テストに合格するために私は何をすべきですか?私が見る唯一の解決策はスタブを信用しないことですが、これは正しいのですか? – Marconline

+0

Extensionに応じてtrue/falseを返すクラス(ExtensionValidatorと呼ぶ)は別のシステムコンポーネントです。このロジックは、他の場所(ExtensionValidatorTests内)でテストされます。現在の状況では、sutをテストしていますが、今のところExtensionValidatorは返される値を返すスタブです。したがって、拡張ロジックに依存するtrue/falseは、現在の状況でテストする必要はありません。これがあなたの質問に答えるかどうか私に教えてください。 – GolfWolf

1

あなたはいくつかのシナリオでは、テスト・セットアップに応じた値を返すために、スタブメソッドを設定することができます。他の人には、有効であるべきデフォルト値を返す。

関連する問題