Mat*_*ley 13 android mocking mockito powermock
我创建了一个新的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");
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我尝试从Eclipse运行项目,或从命令行生成项目.我犯了同样的错误:
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description;
事实证明,无论是junit-4.8.2.jar和mockito-all-1.9.5.jar定义org.hamcrest.Description.出于显而易见的原因,我必须包括Mockito罐子 - 我需要Mockito.Android提供了不同版本的JUnit,但它是一个不包含@RunWith注释的旧版本.
有人可以回答如何在Android项目中使用powermock和mockito,而不会出现冲突org.hamcrest.Description问题吗?
pob*_*key 11
抱歉,您无法在Dalvik VM中使用PowerMock.
PowerMock的工作原理是在自定义ClassLoader下运行测试,该ClassLoader使用Javassist来修改类的字节码.这在普通的JVM上运行正常,但在Dalvik上字节码和类格式不同,所以这种方法不起作用.PowerMock需要重写才能使用Dexmaker而不是Javassist - 这绝对是非常重要的,我在PowerMock 问题列表中看不到这样的内容.
All*_*ing 10
实际上,我发现这完全是不真实的(至少在最新版本中).
在我的模块的gradle设置中,我想测试我的代码
// Mockito and PowerMock
androidTestCompile ('org.powermock:powermock-mockito-release-full:1.6.0') {
exclude module: 'hamcrest-core'
exclude module: 'objenesis'
}
Run Code Online (Sandbox Code Playgroud)
一切都运行良好.只要我使用:
@RunWith(PowerMockRunner.class) @PrepareForTest(ClassToMock.class)
Run Code Online (Sandbox Code Playgroud)
注释我的课程(例如,不能用Robolectric运行它,在CI环境中仍然可以)