我正在尝试编写一个同时需要Robolectric 2.2 和PowerMock的测试,因为被测代码依赖于一些 Android 库和第三方库以及我需要模拟的最终类。
鉴于我被迫通过以下方式使用 Robolectric 测试运行器:
@RunWith(RobolectricTestRunner.class)
...我不能使用 PowerMock 测试运行程序,所以我正在尝试使用 PowerMock java 代理替代方案,但到目前为止还没有运气。
我已经根据本指南设置了所有内容,但是我面临 javaagent 库所需的类和 robolectric 通过其与 asm-1.4 的依赖关系所需要的类之间的冲突问题。两者都依赖
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
我什至尝试修改 javaagent 库 jar 以完全删除其中的 org.objectew.asm 类,但这不起作用,因为 ClassNotFoundException 之后发生,因为 org.objectweb.asm 包中需要一些其他类,只发货在 javaagent 库 jar 中,而不是在 asm 中。
有任何想法吗?根据那里的示例,该代理似乎至少可以与 Spring 测试运行器一起正常工作。