2008-09-17 14 views
11

Javaユニットテストの自動生成ツールとしては、フリーでオープンソースのツールが最適です。私は、ユニットテストは、システムの設計を文書化し、駆動する通常のTDDユニットテストと同じ目的を実際果たすことはできません。しかし、自動生成された単体テストは、巨大なレガシーコードベースを持ち、必要な変更が望ましくない、不明瞭な副作用を伴うかどうかを知りたい場合に役立ちます。レガシーJavaコードの自動生成ユニットテスト

答えて

4
知っています

無料ではありません。オープンソースではありません。しかし、私はAgitarOneアジテーター(http://www.agitar.com/solutions/products/agitarone.html)が自動的にユニットテストを生成し、不要なあいまいな副作用のために

+0

私は大好きですAgitarのようなもののオープンソースの実装を見るためには、オープンソースが本当にうまくいくべきものなのです。 – Vihung

3

正直言って、私はおそらくこれをしません。単体テストは分離されており、副作用の原因となる他のものからすべてが隔離されているため、「望ましくない、わかりにくい副作用」があるかどうかは実際には分かりません。その結果、統合またはシステムテストが必要で、が自動化できるものではありません。

信頼性の高い高レベルのエンドツーエンドシステムテストをいくつか構築し、次にカバレッジテストを使用して見つからなかったものを見つけ出します。欠点は、バグが収穫されると、正確な原因を指摘するのは難しいかもしれませんが、逆に、バグを見る可能性がはるかに高いということです。

バグを見つけたら、単体テストだけを書いてください。あなたが進むにつれて、リファクタリングするビットにTDDを使用することができます。

私は、これはおそらくあなたが聞きたい答えではありませんでしたが、私はほとんど唯一の方法、それを呼び出すないだろうけれども(私は多く、長年にわたってテストしてきたし、これは固体のアプローチです:)

+0

このアプローチの補足として、http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCodeを読むことをお勧めします。pdf(警告PDF) and this http://www-128.ibm.com/developerworks/java/library/j-legacytest.html 実際にテストを自動生成するとは思わない – Jean

3

を見て、本当に良いことがわかっていることは興味深いですが、そのような生成されたユニットテストは、実際に役立つことがあります。レガシーアプリケーションで作業している場合、最先端のユニットテストを正確に記述することは難しいでしょう。

このように生成されたテストでは、変更の際にコードの動作が損なわれないようにすることができます。はコードをリファクタリングし、より良いテストを書くのに役立ちます。

自体はです。魔法のツールについてはわかりませんが、メソッドのjavadocでいくつかのテストを行うことについてJUnitの機能を検索することができます。これにより、簡単なテストを書くことができます。そして確かに、それは実際には価値があります。

第2に、「大きな」テストを手作業で書くことができます。もちろん、これらはユニットテストではありませんそれ自体は(分離、潜在的な副作用など)、良い最初のステップかもしれません。特に、ほとんど時間と従来のアプリケーションがある場合。

ボーナスのヒント!「レガシーコードで効果的に作業する」という優れた本があり、このような状況で使用するための技術を含め、Javaの例があります。残念ながら、手動でいくつかのことをしなければならないでしょうが、とにかくそれをやる必要があります。

3

EclipseのCoviewプラグイン(http://www.codign.com/products.html)はちょうど仕事に見えます。私はコード内のすべてのパスをカバーするテストを生成することに興味があり、これはそうするようです。それはまた、時間のトンを節約するモックを生成します。

関連する問題