最近学测试的时候,遇到一些配置上的问题,在这里都写下来html
写测试的时候遇到这两个配置,一时间没明白,查了下,是这样的java
testCompile 'org.mockito:mockito-all:1.10.19' androidTestCompile 'com.google.dexmaker:dexmaker:1.1' compile 'com.google.dexmaker:dexmaker-mockito:1.1'
testCompile这个配置项是用来给咱们的单元测试的,对应于目录的src/test
androidTestCompile 这个是用来给咱们测试api的,对应于目录是src/androidTest
android
这二者的主要区别是:
前者是容许在通常的Java JVM的,能够作脱离设备的测试
后者是运行在咱们的安卓设备或者虚拟机上的状况git
Compile
这个最多见,再github看到的那些都是这样的形式
compile是对全部的build type以及favlors都会参与编译而且打包到最终的apk文件中。github
Provided
Provided是对全部的build type以及favlors只在编译时使用,相似eclipse中的external-libs,只参与编译,不打包到最终apk。api
APK
只会打包到apk文件中,而不参与编译,因此不能再代码中直接调用jar中的类或方法,不然在编译时会报错app
Test compile
Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起做用。eclipse
Debug compile
Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。ide
Release compile
Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。post
===============================================
在使用这个来作mock的时候,遇到一个更加难受的问题
若是编译依赖只有这个的话
androidTestCompile 'org.mockito:mockito-all:1.10.19'
会遇到下面这个问题
java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167) at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217) at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109) at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105) at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70) at org.mockito.internal.creation.cglib.ClassImposterizer.createProxyClass(ClassImposterizer.java:95) at org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:57) at org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:49) at org.mockito.internal.creation.cglib.CglibMockMaker.createMock(CglibMockMaker.java:24) at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59) at org.mockito.Mockito.mock(Mockito.java:1285) at org.mockito.Mockito.mock(Mockito.java:1163) at com.example.sanjay.myapplication.activity.MainActivityTest.setUp(MainActivityTest.java:56)
上stackoverflow说是要加多这个
androidTestCompile 'com.google.dexmaker:dexmaker:1.1' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
实际加了以后,仍是不行,编译都过,呵呵呵呵。
Error:Execution failed for task ':app:transformClassesWithDexForDebugAndroidTest'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_60_64bit\bin\java.exe'' finished with non-zero exit value 2
索性只是保留这两个,又有下面的问题
java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property)
真的给跪了。
又是StackOverFlow的一个答案,在SetUp()里面加多这个。
System.setProperty( "dexmaker.dexcache", getInstrumentation().getTargetContext().getCacheDir().getPath());
成功经过
成功经过
成功经过
成功经过
参考:
Confused about testCompile and androidTestCompile in android gradle
Android Studio中有六种依赖