我创建了一个新的 Android 测试项目。我从 https://code.google.com/p/powermock/downloads/list 下载了 powermock-mockito-junit-1-1.5.zip。 .我将所有库添加到测试项目的 libs
文件夹中。测试类是一个非常简单的对象:
package com.test.test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import android.util.Log;
@RunWith(PowerMockRunner.class)
public class TestTestAndroid {
public void testRuns() {
Log.e("test", "Test case is called");
}
}
然后,我尝试从 Eclipse 运行项目,或从命令行创建项目。我得到同样的错误:
转换为 Dalvik 格式失败:无法执行 dex:多个 dex 文件定义了 Lorg/hamcrest/Description;
事实证明,junit-4.8.2.jar
和 mockito-all-1.9.5.jar
都定义了 org.hamcrest.Description
。出于显而易见的原因,我必须包含 Mockito jar - 我需要 Mockito。 Android 提供了不同版本的 JUnit,但它是旧版本,不包含 @RunWith
注释。
有人可以回答如何在 Android 项目中使用 powermock 和 mockito,而不会出现冲突的 org.hamcrest.Description
问题吗?
最佳答案
抱歉,您不能在 Dalvik VM 中使用 PowerMock。
PowerMock 的工作原理是在使用 Javassist 的自定义类加载器下运行测试。修改类的字节码。这在普通 JVM 上工作正常,但在 Dalvik 上字节码和类格式不同,所以这种方法不起作用。 PowerMock 需要重写才能使用 Dexmaker而不是 Javassist - 这绝对是非常重要的,我在 PowerMock 上看不到任何类似的东西 issues list .
关于android - 如何在Android项目中使用PowerMock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305490/