2

メソッドの一部にいくつかの命令を追加したいクラスをインストルメントしているとしましょう。たとえば、訪問者Vを開発して、メソッドに存在するメソッド呼び出し命令の名前をからに変更しC.m()たい場合を考えてみましょC.n()C.n_detour()

V実行した後C、実際に望ましい結果が得られることをテストする最も簡単な方法は何でしょうか?ここでは、xUnitスタイルのテストについて話しています。

TraceMethodVisitor最初は、ひっくり返して自分の文字列と比較できると思いCましたが、テストとはほとんど関係のない「装飾」命令(行番号など)がたくさんあることがわかりました(を参照)。TraceClassVisitorの出力をフォーマットします)。

C.n_detour()理論的には、aの存在と非存在の両方を実行してチェックする訪問者を作成できることはわかっていC.n()ますが、上記のアプローチに沿ったものを使用したいと思います(命令ごとの命令を比較します)。

ASMのTreeAPIを調べましたが、それらのdecoration手順もそこに表示されているため、それほど良くは見えません。

ASMを使用した過去のコードテストの経験がある人はいますか?

4

1 に答える 1

1

protectedにして、テスト ケースC.n_detour()で拡張Cし、呼び出しの数をカウントします。

パターン: すべてのインスツルメンテーションは何らかの新しい副作用を生み出します。それが最初にインストルメント化を行っている理由です。そのため、副作用があるかどうかを確認するテストを作成します。インストルメンテーションの特定の実装をテストするのではなく、一般的な「目的の効果があるか」をテストします。

のインストルメント化Cされたバージョンをクラスパスに配置するには、新しいクラスローダーが必要になる場合があります。

Maven を使用する場合は、1 つのモジュールにインストルメント化し、テストを 2 番目のモジュールに配置することをお勧めします。

于 2011-11-02T10:06:55.040 に答える