Java単体テストを自動生成するための最良の、できれば無料/オープンソースのツールは何ですか? 単体テストは、システムの設計を文書化して推進する通常のTDD単体テストと同じ目的を実際に果たすことはできません。ただし、自動生成された単体テストは、巨大なレガシー コードベースがあり、必要な変更が望ましくない不明瞭な副作用をもたらすかどうかを知りたい場合に役立ちます。
5 に答える
興味深いですが、そのような生成された単体テストは実際に役立つ可能性があります。レガシーアプリケーションで作業している場合、正確で最先端の単体テストを作成するのは難しいことがよくあります。
そのような生成されたテスト(もちろんそれらを生成する方法がある場合)は、変更中にコードの動作が損なわれないことを確認できます。これにより、コードをリファクタリングし、より適切なテストを作成できます。
さて、それ自体を生成することについて。魔法のツールについては知りませんが、メソッドのjavadocsにいくつかのテストを含めることに関するJUnit機能を検索することをお勧めします。これにより、いくつかの簡単なテストを作成できます。そして、はい、それは実際には何らかの価値があります。
次に、「大きな」テストを手作業で作成できます。もちろん、これらはそれ自体が単体テストではありません(分離なし、潜在的な副作用など)が、良い最初のステップになる可能性があります。特に、時間とレガシーアプリケーションがほとんどない場合。
ボーナスのヒント!このような状況で使用する権利を含む、Javaの例を含む優れた本「レガシーコードを効果的に使用する」があります。残念ながら、手動でいくつかのことを行う必要がありますが、とにかくあるステップでそれを行う必要があります。
無料ではありません。オープンソースではありません。しかし、AgitarOne Agitator ( http://www.agitar.com/solutions/products/agitarone.html ) は、ユニット テストを自動的に生成し、望ましくないあいまいな副作用を探すのに非常に適していることがわかりました。
Eclipse 用の Coview プラグイン (http://www.codign.com/products.html) は、まさに仕事のようです。コード内のすべてのパスをカバーするテストを生成することに興味がありますが、これでうまくいくようです。また、モックを生成するので、時間を大幅に節約できます。
正直なところ、私はおそらくこれをしないでしょう。単体テストは分離されており、副作用を引き起こす他のものからすべてが隔てられているため、「望ましくない、あいまいな副作用」があるかどうかは実際にはわかりません。その結果、統合またはシステム テストが必要になりますが、それは自動化できるものではありません。
いくつかの高レベルのエンド ツー エンドのシステム テストを構築して、ある程度の自信を持たせてから、カバレッジ テストを使用して見逃しているものを見つけます。欠点は、バグが発生したときに指摘するのが難しくなることです。正確な原因はわかりませんが、バグが発生する可能性がはるかに高くなるという利点があります。
バグを見つけたら、バグ専用の単体テストを作成します。先に進むにつれて、リファクタリングするビットに TDD を使用できます。
これはおそらくあなたが聞きたい答えではないことはわかっていますが、私は何年にもわたってテストしてきましたが、これは堅実なアプローチです (ただし、これを唯一のアプローチとは言いません :)