gpt4 book ai didi

android - Double Espresso 不适用于 Robolectric

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:07 26 4
gpt4 key购买 nike

我正在尝试通过 Robolectric 进行仪器测试和单元测试来运行 Espresso(使用 Double Espresso )。到目前为止,我所拥有的主要基于 deckard-gradle例子。

注意:Gradle 1.10

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.4'
classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.0'
}
}

apply plugin: 'android'
apply plugin: 'android-test'

android {
compileSdkVersion 19
buildToolsVersion '19.0.3'

defaultConfig {
packageName = 'com.example.app'
minSdkVersion 9
targetSdkVersion 19
versionCode 1
versionName '1.0.0'
testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}

buildTypes {
debug {
debuggable = true
runProguard = false
}

release {
debuggable = false
runProguard = true
}
}

sourceSets {
androidTest {
setRoot('src/test')
}
}

packagingOptions {
exclude 'LICENSE.txt'
}
}

androidTest {
include '**/*Test.class'
exclude '**/espresso/**/*.class'
maxHeapSize = "2048m"
}

repositories {
mavenCentral()
}

dependencies {
compile 'com.android.support:support-v4:19.1.0'

androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3')
androidTestCompile('com.jakewharton.espresso:espresso-support-v4:1.1-r3') {
exclude group: 'com.android.support', module: 'support-v4'
}

androidTestCompile('junit:junit:4.11') {
exclude module: 'hamcrest-core'
}
androidTestCompile('org.robolectric:robolectric:2.3') {
exclude module: 'classworlds'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-plugin-registry'
exclude module: 'maven-profile'
exclude module: 'maven-project'
exclude module: 'maven-settings'
exclude module: 'nekohtml'
exclude module: 'plexus-container-default'
exclude module: 'plexus-interpolation'
exclude module: 'plexus-utils'
exclude module: 'wagon-file'
exclude module: 'wagon-http-lightweight'
exclude module: 'wagon-http-shared'
exclude module: 'wagon-provider-api'
}
androidTestCompile 'com.squareup:fest-android:1.0.8'
}

我的目录结构如下,其中com.example.app.espresso需要作为 connectedAndroidTest 运行和 com.example.app.data作为test :

src|- debug|- main|- release|- test   |- java      |- com         |- example            |- app               |- espresso                  |- HomeActivityTest.java               |- data                  |- DataTest.java   |- resources      |- data_input.json

所以当我运行 gradle clean test , 我在 HomeActivityTest.java 中收到无法识别 Espresso 导入的错误.

当我运行 gradle clean connectedAndroidTest , 我在 DataTest.java 中收到无法识别 JUnit4 注释的错误(FailedToCreateTests.testSuiteConstructionFailed)。

如果我去掉任何一个部分(依赖项和源代码),另一个部分可以独立工作,但不能将所有内容都包含在一起。

注意:我尝试在本地导入 Espresso jar (没有 Double Espresso),与 deckard-gradle 的操作方式相同,在我使用 support-v4 中的任何内容之前一直有效Espresso 测试中的库(com.jakewharton.espresso:espresso-support-v4 似乎解决了这个问题,本地 jar 没有其他选择),然后它爆炸成 FailedToCreateTests.testSuiteConstructionFailed .

有人用过这个结构吗?有没有办法从每个目标中排除源路径?

任何解决方案(全部或部分)将不胜感激。

最佳答案

发生这种情况是因为 Double Espresso Artifact 作为 .aar 文件分发,并且 Robolectric 为运行测试生成的编译任务不依赖于解包 .aar 文件的任务,这些文件是 androidTestCompile 依赖项配置的一部分。

由于您通常不会将 espresso 测试作为运行单元测试的任务的一部分运行,因此您可以安全地将 espresso 测试从 Robolectric 插件生成的编译任务中排除。为此,我将对 Robolectric 插件生成的编译任务的依赖项添加到我的 build.gradle 中,以触及 source 属性。下面的示例代码。确保根据需要修改 robolectric 生成的编译任务的名称(在我的示例中为“compileTestDebugJava”)和您的 espresso 测试的“exclude”。

tasks.whenTaskAdded { theTask ->
if ("compileTestDebugJava".toString().equals(theTask.name.toString())) {
def cleanupTask = "touchUpRobolectricSourceSet"
project.task(cleanupTask) << {
FileTree tree = fileTree(dir: 'src/test/java')
tree.exclude '**/espresso/**/*.java'

theTask.source = tree
}
theTask.dependsOn(cleanupTask)
}
}

关于android - Double Espresso 不适用于 Robolectric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com