Eclipseワークスペース内のすべての呼び出しをカバーするメソッドのためのJUnitテストを作成する
-
11-12-2019 - |
質問
Javaクラスの後に仮定します。
class MyClass {
public String methodA( String data, String expression ) {
// expression is evaluated using data
// ...
// this leads to a result which is returned
return result;
}
}
.
expression
は式言語(DSL)のインスタンスです。したがって、expression
を使用したdata
の評価は、両方の組み合わせによって異なります。通常、expression
は頻繁に変更されない固定値であり、data
はすべての呼び出しを通して変更できます。
well、後でMyClass.methodA(String,String)
にバグが見つかりました。このバグは、基礎となるクラスの中に存在し、expression
とdata
のいくつかの特別な組み合わせでのみ発生します。この特別な場合には、JUnitテストが簡単に書かれており、固定できます。
残念ながら、この方法はプロジェクト全体に頻繁に使用されます。 Eclipse呼び出し階層は、このメソッドが使用されている他の2つ以上のメソッドを識別します。バグ修正を適用するだけなら、私は今、回帰を恐れています。もっと安全に感じるために、私は回帰試験をしたいのですが。
通常、単体テストは、重要な種類の呼び出し、特に国境ケースを考慮する必要があります。しかし、expression
は非常に変化し得るDSLであるため、すべての潜在的な使用量をテストするのは簡単ではありません。さらに、これらのテストは、バグに頼る誤った使用法を識別しません。
だから私の考えは次のように進むことです:
-
このメソッドのすべての呼び出しを見つけ(Eclipseの "Call hierarchy"を使用して)、
expression
のすべての値を抽出します。 -
data
(データベースから)のための十分な実寿命値とそれを最初に表現して、元のバージョンのMyClass.methodA(String,String)
を使用してすべての式を断する。 Triples(data, expression, result)
をファイルに保存します。 -
バグ修正を実装します。
-
上記のファイルを使用して、結果が変更されていないことをアサートするために、上記のファイルを使用してメソッドのメソッド
MyClass.methodA(String,String)
。次の質問:
このアプローチについてどう思いますか?
Eclipseの呼び出し階層の使用コピー方法をコピーして貼り付けることができますが、クリップボードへの引数を含む正確な呼び出しはそうしません(ステップ1)。見つかったメソッドごとに手書きの呼び出しをコピーする必要があります。便利な方法で呼び出しを抽出するにはどうすれば(完全なEclipseワークスペースではいくつかのプロジェクトで)?
imho私は1つの方法を1つの方法のテストしています、したがって、テストは1つの単位のみをカバーします。ステップ4のためにJUnitを使うのは大丈夫ですか、それとももっと洗練されたものはありますか?
解決
あなたのソフトウェアをテストすることによって予想される追加値として、最も低いコストと最大の結果を持つ最も多くの状況をカバーすることです、私はあなたのアプローチに同意するでしょう。
あなたのソフトウェアからのReallife SampleValuesを収集し、それらを代表的なファイルに保存することは、このことを実現するための複雑であり、このことを分析するための最良の方法として私のようです。手動でコピーしなければならない場合でも