Robolectric 2.2 とPowerMockの両方を必要とするテストを作成しようとしています。テスト対象のコードは、いくつかの Android ライブラリと、モックする必要がある最終クラスを持つサードパーティ ライブラリに依存しているためです。
私がRobolectricテストランナーを使用することを余儀なくされていることを考えると:
@RunWith(RobolectricTestRunner.class)
...PowerMock テスト ランナーを使用できないため、PowerMock Java エージェントの代替手段を使用しようとしていますが、これまでのところ運がありません。
このガイドに従ってすべてをセットアップしましたが、asm-1.4 との依存関係により、javaagent ライブラリと robolectric が必要とするクラス間の衝突の問題に直面しています。どちらも依存する
org.objectweb.asm.ClassVisitor
、ただし javaagent-1.5.1 には ClassVisitor がインターフェースである独自のバージョンが付属しており、同じ名前空間の asm-1.4 バージョンは抽象クラスであり、実行時に対応するエラーが発生します。
java.lang.IncompatibleClassChangeError: class org.objectweb.asm.tree.ClassNode has interface org.objectweb.asm.ClassVisitor as super class
そこにある org.objectew.asm クラスを完全に削除するために javaagent ライブラリ jar を変更しようとさえしましたが、出荷された org.objectweb.asm パッケージに必要な他のクラスがいくつかあるため、後で ClassNotFoundException が発生するため、それは機能しません。 asm ではなく、javaagent ライブラリ jar にあります。
何か案は?実例によると、エージェントは、少なくとも Spring テスト ランナーでは問題なく動作するようです。