2017-01-19 3 views
4

これを例をあげて説明します:JUnitテストの標準構造は存在しますか?テストごとにいくつのアサーションが多いのですか?

私はXの整数の配列と開始位置を含む余分な整数を受け取る関数を持っているとします。その位置が、0値を無視して、配列が最後に開始位置から、10の以上の値が含まれていない場合-1000000を返します。

public double calculateAverage(ArrayList<Integer>, int startingPosition){ 
    //functionLogic 
    return myAverage; 
} 

私はユニットテストに新しいですが、私は次の操作を行うことをお勧めここのテスト:

  • 20の整数リストでテストし、5を開始位置としてテストします。 (5から14までの10個の数値の平均値を返す必要があります)
  • 20の整数リストと15を開始位置としてテストします。 (-1000000を返す)
  • 9整数リストでテストします。
  • 数字の半分が0であり、開始位置が5である20個の整数でテストします(開始位置に関係なく-1000000を返す必要があります)。 (514の間の数値の平均を返す必要があります(0秒)。
  • 数字の半分が0で開始位置が15の20の整数でテストします。私はあなたのほとんどは、単一のテストについての詳細を知っている確信しているとして、このテストが十分でない、またはあまりにも多くの、または単に悪いテスト、任意の改善にコメントすること自由に感じてください可能性があります

に(-1000000を返す必要があります)私よりも

私の質問:

私は5つのJUnitテスト関数を記述する必要がありますか? 5つのアサーションで1つだけ書く方が良いですか?あるいは私は2と3のグループでそれを(例えば)ダイビングするのですか?

ここで推奨されるスタイルは何ですか?

ご利用いただきありがとうございます。

答えて

4

かなり広範ですが、私は "非公式"コンセンサスは絶対に制限テスト内のアサーションの数だと思います。

つまり、いくつかの巨大なテストよりも多くの小さなテストを好む。

推論:ユニットテストの中核的なアイデアは、障害の根本原因を理解し、解決するのに役立ちます。また、あるテスト方法で複数のアサートまたは「テスト」がある場合は、テストが失敗した場所を正確に把握するために最初の時間を費やします。

2行または3行だけのテスト(いくつかの設定に続いて "実行"とそれに続く検証/アサートのステップ)を比較してください。

それ以外にも、例えばjavacodegeeksなど、多くの優れた素材があります。

+0

これは単なる例でしたが、現時点では現在現時点では36個のユニットテストがある500行クラスがありますが、コードの100%もカバーしません。それは普通ですか? – Tuzane

+3

それは...たくさん聞こえる。しかし、それにはたくさんの理由があります。例えば、あなたのコアクラスは、あまりにも多くの異なることをしています(単一責任の原則に違反しています)。その意味では、おそらくcodereview.stackexchange.comにそのコードを入れて、人々が何を言わなければならないかを見ます。どのような種類のコーディングスキルでも、単体テストコーディングスキルは、レビューを行うときにのみ向上します。より多くの方が良い。 – GhostCat

+0

私はちょうど編集とリンクを見て、共有のおかげで、それは本当に具体的なアドバイス、正確に私が必要なものを提供します。ありがとう。 – Tuzane

2

多くのテスト方法を書いたくない場合は、パラメータ化テストに行くことができます。
ここでは、1つのテスト方法と1組の入力とそれに対応する出力しか持たない。

パラメータ化されたテストの詳細については、parameterized tests in actionをご覧ください。

関連する問題