メソッドの一部にいくつかの命令を追加したいクラスをインストルメントしているとしましょう。たとえば、訪問者V
を開発して、メソッドに存在するメソッド呼び出し命令の名前をからに変更しC.m()
たい場合を考えてみましょC.n()
うC.n_detour()
。
V
実行した後C
、実際に望ましい結果が得られることをテストする最も簡単な方法は何でしょうか?ここでは、xUnitスタイルのテストについて話しています。
TraceMethodVisitor
最初は、ひっくり返して自分の文字列と比較できると思いC
ましたが、テストとはほとんど関係のない「装飾」命令(行番号など)がたくさんあることがわかりました(を参照)。TraceClassVisitorの出力をフォーマットします)。
C.n_detour()
理論的には、aの存在と非存在の両方を実行してチェックする訪問者を作成できることはわかっていC.n()
ますが、上記のアプローチに沿ったものを使用したいと思います(命令ごとの命令を比較します)。
ASMのTreeAPIを調べましたが、それらのdecoration
手順もそこに表示されているため、それほど良くは見えません。
ASMを使用した過去のコードテストの経験がある人はいますか?