【问题标题】:How do I keep my Android testing libraries separate from my application libraries in Android Studio?如何在 Android Studio 中将我的 Android 测试库与我的应用程序库分开?
【发布时间】:2015-07-07 20:38:09
【问题描述】:

我在 build.gradle 文件中设置了我的模块依赖项:

dependencies
{
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.android.support:support-v4:22.2.0'
   androidTestCompile fileTree(dir: 'libs/test', include: ['*.jar'])
}

在我的 libs 文件夹中,我拥有构建应用程序所需的所有库。我将运行测试所需的库放在名为“test”的子文件夹中

这似乎在我的代码编译时起作用,我可以制作我的模块。但是,当我尝试运行我的任何测试时,它无法找到我尝试包含的测试库。 Gradle 控制台中的错误实际上指向我没有显示任何错误的代码片段。

另外,我确实正确设置了我的测试,因为我可以通过将所需的 jar 移动到 libs 文件夹并将我的依赖项更改为:

dependencies
{
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.android.support:support-v4:22.2.0'
}

但是,如果 androidTestCompile 不起作用,我真的看不出它的意义。如果不需要的话,我也不想在我的 apk 中包含这些 jar 文件。

如果有帮助,我正在使用 Android Studio 版本 1.2.2 和 Gradle 插件版本 1.2.3。

提前感谢您的帮助。

【问题讨论】:

  • 您是否正在运行单元测试或已连接的 Android 测试(需要 Android 设备或模拟器的测试)?
  • 您用来引用测试 jar 的导入语句是什么?
  • 我正在运行已连接的 Android 测试。我的测试代码中的一个导入看起来像“import com.robotium.solo.Solo;”并且robotium jar文件在libs/test目录下。
  • “找不到我试图包含的测试库”——你的具体症状是什么?如果您将这些从 libs/test/ 移动到 libsTest/(或libs/ 之外的任何其他),这有帮助吗?

标签: android android-studio gradle integration-testing android-gradle-plugin


【解决方案1】:

见下面的例子。

创建 tests 文件夹 平行于 src 文件夹。 在该文件夹中创建所有测试用例。 如果您将文件夹创建到另一个路径中,则需要为此调用。(已添加到代码中。)

 dependencies {
    androidTestCompile files('libs/dexmaker-1.1.jar')
    androidTestCompile files('libs/org.mockito:mockito-core:3.9.5')
    androidTestompile files('espresso-1.0-SNAPSHOT-bundled.jar')
    }

defaultConfig {

    testApplicationId "xxx.xx.abc"
    testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"

}

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']

    }

    // Move the tests to tests/java, tests/res, etc...
    instrumentTest.setRoot('tests')

    instrumentTest {

        java.srcDirs = ['tests/src']

    }

    androidTest.setRoot('tests')
    androidTest.java.srcDirs = ['tests/src']

【讨论】:

  • 谢谢!我认为我的问题是我在 src/androidTest 中有 androidTest 的默认设置,但我的主源目录只是“src”。我假设那里一定有冲突。这似乎解决了它。
【解决方案2】:

您应该使用 sourceSets 使您的 apk 不受测试库的影响 Gradle User Guide 将“main”用于生产代码,将“androidTest”用于测试,gradle 会自动添加指定的源代码。

   sourceSets {
        main {
            ...
        }
        androidTest {
            ...
        }
    }

【讨论】:

  • 我需要在 Android Studio 之外构建我的 apk 以保持这些独立吗?似乎当我加载我的调试 apk 时,它仍然加载了测试库。感谢您迄今为止的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2014-05-05
  • 2020-09-02
  • 2015-04-01
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多