2011-06-27 10 views
3

私はこのクラスを使用して、作成されたクラスが特定の構造に一致するかどうかを確認します。私がやっていることは、プロパティファイルを読み込んでそれをクラスと比較することです。Javaクラス構造をテストするためのライブラリまたはフレームワーク

ie。

className: demo.HelloWorld 
classFile: demo/HelloWorld.class 
methods: public static main(java/lang.String[]) : void 
attributes: name : java.lang.String 

など。

このようなことに取り組む前に、誰かが同じことをするライブラリやフレームワークを知っているかどうかを知りたいと思います。

+0

これはなぜ大変なのでしょうか? DRYの違反。ルールベースであるかどうかは分かります(このインターフェイスを実装するすべてのクラスのように指定する必要があります)。 –

+0

@Adam:もちろんテストのため。私は、クラスファイル(.classファイル)にクラス、メソッド、属性などが含まれているかどうかをテストしたい。うん、テストは基本的には自分自身を繰り返します:) – OscarRyz

+0

私は何かが欠けている必要があります。だから、あなたはJavaクラスと一緒にこれらのプロパティファイルを書く人を想像していますか?定期的なユニットテストを書くだけではいかがですか?テストのために、私はいつもあなたのお金を最大限に使いこなそうとしています。あなたがやっている契約テストのレベルはそれに見合うものではありません。特に、実際の単体テストはリファクタリングを行い、メソッド/属性の名前を変更するとコンパイル時のエラーが表示されるため、特に注意が必要です。命名の一貫性を試そうとするなら、私の答えを見てください。 –

答えて

0

多くのリフレクションツールで構築された素晴らしいライブラリがありますが、ライセンスの問題(ティーザー!)のためにリリースできません。check this out thoまたはhereです。基本的なリフレクションツールを構築したら、かなり早く一緒に来るようになります。

0

はない正確に何をしたいと多くの規則が基づいているがhttp://innig.net/macker/

を参照してください。

1

これをうまく実行するには、「構造」(Javaフラグメント)を解析でき、関係するタイプを検索できるJavaパーサーが必要です。 (スクリプト言語ではこれを悪くする可能性がありますが、非常に脆弱で、偽陰性を生成しやすくなります。

DMS Software Reengineering ToolkitとそのJava Front Endは、これらの機能を持つフレームワークです。 DMSは、ソースコードを分析または変換するための任意のカスタムツールを構築できるように設計されています。 DMSはパーサー(選択されたフロントエンドで定義されているパーサー)、ASTビルダー、C、C++、Java、COBOLなどの言語用のシンボルテーブルの作成、手続き的にツリーを検査したり、コード生成やパターンマッチングの目的で、コードの断片を(フロントエンドの解析によって決定されるように)直接表現することができます。

目的のタスクでは、DMSに解析対象のソフトウェアを解析させ、名前とタイプの解決(シンボルテーブルの作成)を行います。次に、DMSのパターンパーサを使用して、 "仕様ファイル"をメソッドシグネチャなどのセットとして読み込み、名前解決機能を使用して識別子(たとえば "demo.Helloworld")の検索/検索、対応するクラスの検索、 。。あなたにはhttp://software.clapper.org/javautil/#documentation

:その後、メソッドのシグネチャに対して解析されたパターンと一致し、不一致が、私はあなたが探している何を考えている矛盾を報告する

+0

私は小さなDSLを構築することができると思います(実際には私の.propertiesファイルです)DMSのようなツールを使用するのが残忍であるかどうかはわかりません。私は見つけるでしょう – OscarRyz

+0

@OscarRyz:仕様のDSLだけでは不十分です。 Javaを実際に解析して名前/型の解決を行う能力がなければ、あなたが望むものを手に入れることはできないと思います。 –

0

をI HAVAは、いくつかの時間前に舌と呼ばれる素敵なライブラリを使用しましたcase - "classutil"パッケージを見つけてください - シンプルで便利なクラスディスカバリーとフィルターを提供しますが、これは便利かもしれません。

関連する問題