Android单元测试环境搭建采坑记录

添加依赖
android {

    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

    dependencies {
    // App's dependencies, including test
    implementation 'com.android.support:support-annotations:27.1.1'

    // Testing-only dependencies
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
踩坑

以为环境配置好了,可以直接写测试用例run了是吧,此时无论你是什么问题,最终都是告诉你/app/build/outputs/apk/androidTest/app-debug-AndroidTest.apk does not exist on disk.或者你人品好,真的就没问题,当然大部分人应该是没问题的。但是本宝傻眼中,然后开始一步步采坑。

引入环境依赖后,可先使用./gradlew connecteAndroidTest命令检查测试环境。然后可使用./gradlew assembleDebug./gradlew assembleDebugAndroidTest生成test包,在这一过程中会报错具体原因,而不是只显示apk does not exist on disk.

引入测试框架之后造成65536问题
  1. $ ':transformDexArchiveWithExternalLibsDexMergerForDebug'
  2. $ ava.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex"
  3. $ com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

以上问题,统统都是合并dex最大方法数的问题。

所以只需要配置multiDex的解决方案就好了。如果项目中引入了子Modul,记得需要在每个子module里面配置multiDex。

至此,你可能assembleDebug没有问题,但依旧无法找到apk,然后开始google。

Gradle-aware Make
Gradle-aware Make.png

实际上,这个默认配置是存在Gradle-aware Make的,是没有问题的。哪怕你按照他所说再加一个空白的Gradle-aware Make,也是不起作用的。他描述的这一问题其实在官方文档中时有关JUnit测试可能会编译两次的解决方案。


官方文档.png
Android Studio版本缓存问题
Android Studio版本.png

我依照这个指导,删除了我之前版本3.0的一些遗留缓存文件,不过当时的我的问题并不是主要在这里,所以并不知道实际有没有影响。

采用Gradle projects的build
Gradle projects的build.png

采用此方法,并且可以尝试点击assembleAndroidTest、assembleDebug、assembleDebugAndroidTest、installDebug、installDebugAndroidTest等按钮来编译生成apk,或许有用。

我的问题所在

其实bb了这么多,这些并不是我真正的问题所在。
因为我现在所搞的是一个年久依旧在修的项目,里面有无数前辈的耕耘,所以最终在build.geadle文件中发现一段这样的代码:


build.geadle.png

它会使用gralde编译的任务名字,如果包含这些字,这个任务就不可用,则不会继续执行,则不会生成apk了。可怕,最后居然是这样,是我没仔细看这个文件,否则也不会踩前面那么多坑了。

test依赖库和androidsupport库版本问题

库内部有引用support-annotations,如果你已自己引入此库,如果版本一致,会报多个asm-license.txt文件问题,此时只需在删除这个文件即可。


如果不一致,可在test依赖中剃除annotations库即可。


关于stackoverflow上的其他回答

禁用instant run:这主要是由于你使用了jack编译器。并且jack编译器现在已不推荐。对于未使用jack编译器的项目,instant run对此并不影响。

官方文档

invalidating the caches and restarting:很多时候,这个很有用,但是我是gradle有问题,因此并不知晓针对此问题是否可行。

一加手机的问题

至此,环境都已ok,可以开始正常运行单测了。但是在一加手机上,run起来,没有成功没有失败,一直是在过程当中,无法正常运行。目前此情况在一加3T手机上出现,小米三星暂未出现,原因不明,知道了再补吧。

参考文档

The APK file does not exist on disk
Espresso not finding test apk
Android Test release notes
Google文档---已知问题
Test apps on Android

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容

  • 说明 本文主要介绍和Gradle关系密切、相对不容易理解的配置,偏重概念介绍。部分内容是Android特有的(例如...
    jzj1993阅读 15,624评论 1 62
  • 所有Android插件的基本扩展。 你不需要直接使用这个,你可以选择下面几个合适的直接使用 AppExtensio...
    我该忘了我自己w_u阅读 3,360评论 0 5
  • Tinker 热补丁接入过程中的坑!!! =============== Tinker 介绍 官方接入说明 gra...
    朱立志阅读 2,107评论 0 2
  • (一) 理想是炸雷 漆黑天空里 震颤懦弱的灵魂 (二) 理想是北斗星 漫漫生途中 它是永远的方向 (三) 怀揣理想...
    小史努比阅读 2,071评论 0 0
  • 这是第二遍读《小王子》了。第一次读的时候,其实并没有太多体会。除了对「第一号作品」的故事印象比较深之外,其他章节也...
    findingsea阅读 966评论 0 3