Android测试教程9--聊聊配置测试环境的一些问题

最近学测试的时候,遇到一些配置上的问题,在这里都写下来html

testCompile , androidTestCompile 与 compile

写测试的时候遇到这两个配置,一时间没明白,查了下,是这样的java

testCompile 'org.mockito:mockito-all:1.10.19'
androidTestCompile 'com.google.dexmaker:dexmaker:1.1'
compile 'com.google.dexmaker:dexmaker-mockito:1.1'
  • 1
  • 2
  • 3

testCompile这个配置项是用来给咱们的单元测试的,对应于目录的src/test 
androidTestCompile 这个是用来给咱们测试api的,对应于目录是src/androidTestandroid

这二者的主要区别是: 
前者是容许在通常的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

===============================================

mockito

在使用这个来作mock的时候,遇到一个更加难受的问题 
若是编译依赖只有这个的话

androidTestCompile 'org.mockito:mockito-all:1.10.19'
  • 1
  • 2

会遇到下面这个问题

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

stackoverflow说是要加多这个

androidTestCompile 'com.google.dexmaker:dexmaker:1.1'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
  • 1
  • 2
  • 3

实际加了以后,仍是不行,编译都过,呵呵呵呵。

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

索性只是保留这两个,又有下面的问题

java.lang.IllegalArgumentException: dexcache == null
 (and no default could be found; consider setting the
  'dexmaker.dexcache' system property)
  • 1
  • 2
  • 3
  • 4

真的给跪了。

又是StackOverFlow的一个答案,在SetUp()里面加多这个。

System.setProperty(
    "dexmaker.dexcache",
    getInstrumentation().getTargetContext().getCacheDir().getPath());
  • 1
  • 2
  • 3
  • 4

成功经过 
成功经过 
成功经过 
成功经过

参考: 
Confused about testCompile and androidTestCompile in android gradle 
Android Studio中有六种依赖

相关文章
相关标签/搜索