2009-03-27 11 views
8

.NETやJavaプロジェクトのユニットテストケースを生成する優れたツールがあるかどうかは、ほぼ100%のコードカバレッジをカバーするユニットテストケースを生成します。テストケースの数は、コードの循環複雑度に正比例する可能性があります(サイクルの複雑さが高いほどループと条件の入れ子が高くなります)。循環複雑度が高いほど、テストケースが大きくなります。私はそれが完全に機能するとは思っていません(私は単体テストをビルドして、それが生成された後に実行するつもりだと言いますが)、テストケースにあなたが修正するテンプレートスタイルを持つことができますあなたの意図するニーズに合ったケース。しかし、適切なセットアップとティアダウンの方法も必要であり、ユニットテスト用のモックオブジェクトを使用するべきかどうかを検出するのに十分であり、依存関係があればそれを検出することができます。だから、存在するそのようなツールはありますか?.NETとJava用のユニットテストケースの自動生成

答えて

14

.NETの場合、MicrosoftはCode Contractsと一緒に、.NET 4.0用に主流になりそうなPexを持っています。私はチャンネル9のビデオを見ることを強くお勧めします。

それはこの種のものは非常にデータ駆動型のクラスのための非常に良好であることを私を打つ - パーサなど私は、私は非常に頻繁にそれとを始めるが、中に持っている便利なツールだろうと見ることができませんそれにもかかわらずあなたの兵器。

+0

ダーン、それに12秒! –

+1

私は何と言うことができますか、マーク?あなたが持っているか持っていないか...;) –

+0

"スタートオフ"で:ペックステストは実行可能な仕様によく似ています。例入力を考えると、ソフトウェアでよりうまく処理できる退屈な仕事です... devloperが無視しようとしているすべてのコーナーケースについて知っています; –

5

C#(または一般的には.NET)では、PEXがそのツールである可能性があります。これはILレベルで動作し、すべてのブランチに強制的に移動しようとします。 BCLなどで、広範なバグを発見しました。

5

ランダムなテスト生成フレームワークに興味があるかもしれません。研究は、あなたが示唆するように、カバレッジに基づいた体系的なアプローチよりもバグを見つけるのと同じくらい効果的であることを証明しました。

.NETとJavaの両方についてRandoopを確認してください。それは、多かれ少なかれランダムなメソッド呼び出しのシーケンスを生成することによって動作し、契約やクラッシュなどをチェックします。完全に自動です。

QuickCheckに基づいて、他のランダムテストツールもチェックしてください。 Java、Scala、F#のために。これはPexに似ています。つまり、仕様やパラメータ化された単体テストを与え、生成された入力引数の数をチェックします。

この「パラメータ化された」単体テストの記述方法は、実際には少なくとも60%のケースでより自然であり、さらに多くのバグがあることがわかりました。

+1

RandoopプロジェクトのWebページがhttp://mernst.github.io/randoop/に移動しました。 – mernst

0

Javaの場合、オープンソースで現在アクティブなEvoSuiteを確認できます(免責事項、私はその貢献者の1人です)。より多くのツールのリストについては、関連するquestionも参照してください。

0

Javaの場合は、JUnit-Toolsを試してください。それは良い文書と一緒に独自のEclipseプラグインを持っています。

関連する問題