解决 Android Studio 执行 Instrumentation 测试 提示 Method "xxx" not found

Update: Android Studio 2.0_preview9 以上版本已经修复该问题,出问题的版本是 preview5,其中6,7,8未验证。

刚看完 Paul Blundell 大神的 《Learning Android Application Testing 2en Edition》,不要问我咋看完的(搞个词典,随手查词呗~~)。准备做一次总结,然后看一下 Godfrey Nolan《Agile Android》

然而,在练习书中的例子时出现了一个令人裆下隐隐作痛的事情:执行新写的测试用例,Android Studio 提示该方法找不到:

junit.framework.AssertionFailedError: Method "testSayHi" not found
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:165)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853)

这是啥鬼呢?Paul 哥也没教我咋解决啊!自己折腾起来吧~~


首先分析该错误原因:

既然提示该方法找不到,那肯定是没有把最新的测试 APK 装到手机里面咯。

问题确定了,那么下一步该做什么呢?当然是检查 Android Studio 的配置啦:

编辑运行配置

按照上图的提示打开运行配置窗口,然后切换到 Miscellaneous 标签,看到了 “Skip installation if APK has not changed” 选项默认是勾选的,如图:

Miscellaneous 标签选项

猜想:勾选此项后,如果不修改应用代码,测试 APK 也会跳过安装?

瞎扯!去掉勾选后还是那样~

嗯,看来要换一条思路了……

那,把应用卸掉呢?

果然,将应用从手机上卸载后,测试正常执行。

可是,如果每次执行测试都要手动卸载一次应用太麻烦了。

那咋办咧?

再换个思路呗!这次从 强大的 Gradle 入手,我们先来看一下如何通过 Gradle 命令执行测试:

./gradlew connectedAndroidTest

哎哎哎,这家伙在运行完测试就自动把 APK 给卸载了。这次测试可以成功执行了,也不用手动卸载 APK 了,可是,命令行运行结果不够直观啊,调试太麻烦咯。

不过,这给我们提供了一个思路:能不能让 Android Studio 在执行测试之前编译最新的测试 APK 并安装到设备中呢?

研究半天,发现了 Gradle 中有这么一个命令: installDebugAndroidTest。该命令正好符合我们的需求。

installDebugAndroidTest task

那么,如何将该命令整合进来呢?还得从 Android Studio 配置入手啦,再次打开配置界面,仔细研究各项配置,终于发现了新大陆:

Before launch

如图所示,该选项似乎可以在测试执行前做点什么,点击 “+” 在弹出菜单中赫然发现了 Run Gradle Task 选项:

Run Gradle task

抓紧点开看一下,在弹出的对话框中,Gradle project 选择 ”:app“,Task 选择 “installDebugAndroidTest”,然后点击 OK 完成配置。

选择 project
选择 task

此时,配置页面上已经发生了变化,如下图:

task 已添加进来

这样,我们再次执行此测试用例就不会提示方法找不到的错误了。

但是,细心的你可能已经注意到了此方法的一个缺陷:需要先执行一次该测试,失败后去修改它的配置,修改完毕后再次执行该测试才会成功。这也不比卸载 APK 简单到哪里去,不符合我们的预期,但是已经离目标很近了哦!

再次打开配置页,找到左边的 Defaults 标签并展开,发现有一个 Android Tests 子标签,如图:

修改默认配置

在这里重复上面添加 Gradle Task 的步骤,然后保存配置。

让我们再添加一个测试用例验证此方案是否可行:

public void testConquer() {
    assertTrue(true);
}

Yes! 万事大吉啦~~

完事大吉

至此,问题解决完毕。 Have Fun(0_o)~

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,815评论 25 707
  • - - 人从爱生忧,从忧生怖。若离于爱,何忧何怖? 有没有个人也秒懂你。 敏那,哦哈哟。 今天...
    夜葵魃阅读 1,257评论 1 3
  • Shell echo命令 Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。...
    yyshang阅读 270评论 0 0
  • Secret Chan的淘宝店就像她的域名一样,神神秘秘,无影无形。 这么多年,作为淘宝的金钻买家,我多数时间在观...
    Mudadany阅读 398评论 0 3
  • 三个月后。 “时间真的是一种很不禁磨的东西啊,曾经还需要在父母怀里才能安然入睡的婴儿,曾经还需要去哪都需要父母抱...
    荔枝根阅读 321评论 0 0