2011-12-10 8 views
0

私はJUnitとJavassistをかなり浅く理解しています。たとえば、ライブラリがあれば、ライブラリのどのメソッドが呼び出されたかを実行時に知りたい。私はバイトコード操作を使ってsystem.out.println( "method_name")を挿入することができます。メソッドの最初のステートメント。したがって、実行時には、呼び出されたメソッドが表示されます。JUnitテストでJavassistを使用する

main()が呼び出される前に私はスタンドアロンアプリケーションでインターセプトでき、自分自身のクラスローダーを使用します(下記参照).JUnitではmain()もありません。 多くのありがとうございます。

... 
    Loader loader = new Loader(pool); 
    loader.addTranslator(pool, xlat); 
    loader.run(className, args); 
... 

は編集:私はJUnitの4.8を使用して、Javassistの3.15.0.GA

答えて

0

私が代わりに別のアプローチをお勧めかもしれませんか?代わりに、AspectJを使用して、アスペクト指向のアプローチを使用できます。これで、監視するサブセットまたはすべてのメソッドの周りにポイントカットを定義できます。

コードカバレッジを監視する場合(JUnitを使用していて、System.out.println(...)を探しているだけの場合)、コードカバレッジツールを探している可能性があります。もしそうなら、カスタムコードなしでCoberturaが最適です。

これらのオプションはどちらも独自のバイトコード操作を行いますが、開発者が保守する必要があるものはありません。

EclipseをIDEとして使用している場合は、これらの両方がEclipseと非常によく似ています。 AspectJは実際にはEclipseプロジェクトですが、Eclipseは必要ありません。 CoberturaのEclipseプラグインはeCoberturaです。

さらに別のオプションは、JUnit自体で行うことです。これは、バイトコードの操作を必要としません。そのTestWatchmanクラスを見てください。私は他の図書館と同じようにこれをオンラインで文書化していませんが、JUnit utilities libraryの一部として私のBaseTestクラスを見ることができます。これを拡張するJUnitテスト・クラスは、各テストの開始、成功、または失敗時に自動的に(SLF4Jへ)ログを記録します。ただし、これはすべてテストレベルのみであり、各テストが実行される他のメソッドの監視には役立ちません。

+0

ありがとう – Mike

関連する問題