如何在Android Studio中构建项目测试目录结构?

32

目前还没有关于此的规定,但是现在根据Android测试基础页面所述,我该如何为Android Studio构建测试目录结构呢?

尤其是,有关如何在Android Studio上运行jUnit测试的任何指针都会很有帮助,谢谢。

另外,由于Android Studio的一些变化,使用android工具现在并不真正有用。

更新:

我尝试设置测试文件夹并运行它,但我得到的只是以下内容:

Running tests
Test running startedTest running failed: Unable to find instrumentation info for:ComponentInfo{<project-package-name>/android.test.InstrumentationTestRunner}
Empty test suite.

我也尝试在其中添加一个标准的AndroidManifest.xml文件,用于测试。

4个回答

60

更新

从构建工具19.1.0和构建插件0.11.0开始,build.gradle文件需要将testPackageName重命名为testApplicationId(也应将packageName重命名为androidId)。

自构建插件0.9.0起,instrumentTest文件夹已重命名为androidTest。这是我们进行测试所需的全部内容。

以下是0.11.+ DSL示例:

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
        androidId "org.homelab.lab"
        testApplicationId "org.homelab.lab.test"
        testInstrumentationRunner "org.homelab.lab.test.Runner"
    }

    ...
}

注意事项:如果您的构建文件中包含testPackageNametestInstrumentationRunner的定义,请将其移除。

适用于版本0.5.0-0.8.+:

Android Studio使用Gradle插件版本0.5.+,遵循Gradle SourceDir原则。

Android Studio项目结构

如何让它工作:
1.更新SDK
2.安装或更新Gradle到1.6(报告了与1.7的问题),或使用Gradle Wrapper
3.不要使用Android Studio运行instrumentation任务,使用gradle命令

gradle connectedCheck

4.不要在测试和主应用程序中使用相同的软件包
5.使用浏览器检查结果

<project>/build/reports/instrumentTests/index.html

注意事项:
如果测试包和主包相同,则可能会创建空的TestSuite。这样的结果是误导性的,因为Gradle报告没有问题,但报告显示没有测试任何类。

编辑:

以下是配置在0.9.0之前所需的仪器测试的build.gradle部分:

android {
    compileSdkVersion 14
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 17
        testPackageName "org.homelab.lab.test"
        testInstrumentationRunner "org.homelab.lab.test.Runner"
    }

    ...
}

示例项目 https://github.com/swavkulinski/android-studio-instrumentation-test


1
谢谢你的回答。由于我对 Android 测试还是个新手,所以我最终决定暂时回到 Eclipse。我相信随着 Google 在未来版本中更新 Android Studio,会让事情变得更容易。 - Jonathan Lin
是的,这只是早期预览。目前使用纯净的IntelliJ和JetGradle实现相同的功能要容易得多。出于某种原因,我在Android Studio中找不到JetGradle。 - robotoaster
@robotoaster:我们应该更新build.gradle文件以指定测试的位置吗? - dannyroa
1
我认为testAndroidId现在应该改为testApplicationId - SteveEdson
兄弟,谢谢你发布这个!!!我已经尝试过2-3次让这些东西工作了。甚至谷歌自己的压缩文件示例也无法运行。今天我必须让它工作,现在我可以真正编写我的测试了! - StarWind0

1
现在在Android Studio中,您只需按照将测试放置在instrumentDirectory的惯例即可设置instrumentTests。Gradle只需要知道您所拥有的任何依赖项,而在我的情况下是Robotium。请注意保留HTML标签。

Android Studio Screenshot

dependencies {
    androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.0.+'
}

当测试完成后,您将在GUI中看到结果,因此您无需使用任何命令行!您还可以右键单击JUnit测试上方的模块以运行所有JUnit测试。

1
这是一个不断变化的目标,你可能需要解释一下"now"在gradle和android gradle插件版本中的含义。 - Colin M.
现在文件夹的名称是androidTest。 - diyoda_

1
我也遇到了这个问题。Android Studio 只能构建和安装主应用程序 APK 到设备上,并且在以下消息中失败测试:
测试运行开始,测试运行失败:无法找到以下组件的仪表板信息:{com.example.app.test/android.test.InstrumentationTestRunner}
空测试套件。
然而,运行 connectedCheck Gradle 目标会生成并安装两个 APK 并成功执行仪表测试。结果你可以通过运行 installDebugAndroidTest 目标来要求 Gradle 仅组装和安装仪表 APK。 运行此目标后,Android Studio 能够正常运行仪表测试,甚至能够附加调试器! 我猜测每次更改测试本身时都需要刷新仪表 APK,但其他情况则不需要。
可以通过运行以下命令列出设备上安装的仪表 APK: adb shell pm list instrumentation

0

我有另一种解决这个问题的方法,如果你的原因只是运行配置的问题。

检查你的运行配置,如果你的项目配置是 Android Tests 而不是 Android Application,那么你就会遇到这个问题。

"Running tests
Test running startedTest running failed: Unable to find instrumentation info for:ComponentInfo{<project-package-name>/android.test.InstrumentationTestRunner}
Empty test suite."

因此,请删除Android Tests配置,并为您的项目添加Android应用程序运行配置,然后您就可以运行它了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接