【问题标题】:How to run instrumentation tests for an android library in android studio?如何在 android studio 中为 android 库运行仪器测试?
【发布时间】:2015-06-25 00:18:28
【问题描述】:

文档 (http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing-Android-Libraries) 说它只会自动生成应用程序并使用库作为依赖项运行,但它并没有告诉你包装应用程序活动将被调用什么,这意味着你可以' t 使用检测类(例如http://developer.android.com/reference/android/test/ActivityTestCase.html)对其进行测试。 因为他们需要知道有问题的活动,才能初始化超级构造函数。

有人知道在 android studio 中使用 gradle 进行此类测试的正确方法吗?

【问题讨论】:

    标签: android android-gradle-plugin


    【解决方案1】:

    好的,我有一个可能的解决方案。 这是否是“正确”的方法,我会看看人们怎么说。

    理论上没有什么能阻止我在

    下的某处创建一个“TestActivity.java”类

    /src/androidTest/java/com..bananas/TestActivity.java

    这是真的。您可以在 androidTest 下的潜在 ActivityTest.java 中引用它。

    public class ActivityTest extends ActivityInstrumentationTestCase2<TestActivity> {
    
    public ActivityTest() {
        super(TestActivity.class);
    }
    ...
    

    但是有一个故障/捕获。如果 TestActivity 需要引用任何字符串/常量(eg. res/layout/activity_test.xml),它们不能/src/androidTest/res/layout/ 下。这个文件夹在构建过程中被莫名其妙地忽略了。即使它被列为 gradle 构建的 res 源文件夹(我通过 gradle dumping (println android.sourceSets.androidTest.dump()) 检查,在构建和运行测试时找不到内容......你会得到:

    找不到与给定名称匹配的资源...

    因此,这意味着您可以随意使用自定义活动来测试库,而无需启动一个完整的单独测试应用程序,但是您的库的 res 文件夹中会出现一些额外的混乱。 (尽管这些可以从最终的 .aar 中手动排除)。

    如果有人能解释这个奇怪的问题,或者证明我错了,那就太好了,否则这行得通。 :)


    编辑/更新

    要添加的一件事是确保/src/androidTest 下的AndroidManifest.xml 包含类似以下内容:

    <application>
        <activity
            android:name=".TestActivity"
            android:label="@string/title_activity_test" >
        </activity>
    </application>
    

    ActivityInstrumentationTestCase2 中的getActivity() 如果省略会抛出错误: java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2013-09-21
      • 2017-02-27
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多