Java Assert を使用している開発者はあまり見かけませんが、私は非常に熱心に使用しています。それらを効果的に使用するためのヒントを教えてください。
4 に答える
私は非パブリックメソッドの前提条件assert
を確認するために使用します。念のため、Programming With AssertionsがPreconditions、Postconditions、および Class Invariantsについて書いていることを思い出してください。
assert コンストラクトは完全なデザイン・バイ・コントラクト機能ではありませんが、非公式のデザイン・バイ・コントラクト スタイルのプログラミングをサポートするのに役立ちます。
Java での本格的なサポートについては、サードパーティのライブラリ ( Wikipediaから)の使用を検討してください。
iContract2、Contract4J、jContractor、Jcontract、C4J、CodePro Analytix、STclass、Jass プリプロセッサ、OVal with AspectJ、Java Modeling Language (JML)、Spring フレームワーク用の SpringContracts、または Modern Jass、AspectJ を使用する Custos、AspectJ を使用する JavaDbC、拡張機能を使用する JavaTESK Javaの。
あなたの質問は「java」と「design-by-contract」のタグが付けられており、JMLについて言及していないので、リンクを投稿すると思いました。
http://www.eecs.ucf.edu/~leavens/JML/
JMLは、Javaでコントラクトを作成するためのアノテーション言語です。コントラクトは、実行時アサーションによってチェックするか、静的に検証できます。JMLコミュニティで行われていることを少し掘り下げることで、Javaや他の言語での契約による設計に関する多くの優れた原則とアイデアを見つけることができます。JMLは、Spec#(.NETの場合)やACSL(Cの場合)など、他の言語の同様の注釈言語に影響を与えました。
assert
s は、コードにチェックを挿入するために使用されます。このチェックは、開発中に非常に大きな音で失敗し、生産中に無視されます (フラグによって決定されます)。
これは C の世界から継承されていますが、自由に実行できる独立したテスト スイートを代わりに持つ jUnit などのより体系的なアプローチのために普及していません。
sであまりにも多くの時間を調査する前に、junit などを使用してテスト駆動開発を調べることをお勧めしますassert
。私のように、アサーションは単体テストよりも役に立たないことに気付くでしょう。
私は個人的に、すべての回復不可能な病的なシナリオでアサートを使用しています。これが意図されていることです。これは、アプリケーションのロジックの最も重要な部分のみをアサートすることを意味します。もちろん、アサートは開発とテストでのみ有効です。実稼働コードに負担をかけたくありません。ユーザーがそのような重大なシナリオに陥ることがないように、すべてを適切にテストしたと想定しています。