将设备上的插桩测试添加到具有 Robolectric 个测试的项目
Add on-device instrumented tests to a project with Robolectric tests
我有一个 Android 项目,它使用 Robolectric 进行测试。 build.gradle 的相关部分看起来有点像这样:
apply plugin: 'robolectric'
robolectric {
include '**/*Test.class'
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile 'org.hamcrest:hamcrest-integration:1.1'
androidTestCompile 'org.hamcrest:hamcrest-core:1.1'
androidTestCompile 'org.hamcrest:hamcrest-library:1.1'
androidTestCompile('junit:junit:4.12') {
exclude module: 'hamcrest-core'
}
androidTestCompile('org.robolectric:robolectric:2.4') {
exclude module: 'classworlds'
exclude module: 'commons-logging'
exclude module: 'httpclient'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-project'
exclude module: 'maven-settings'
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-provider-api'
}
androidTestCompile 'com.android.support:support-v4:21.0.3'
}
并且所有 Robolectric 测试都在 src/androidTest/java/my/package/*Test.java
中。这一切都运作良好。我可以 运行 将测试作为正常 Gradle 构建的一部分,或者通过 IntelliJ 的 JUnit GUI。
现在我需要添加一些无法使用 Robolectric 并且需要在真实 Android 设备上 运行 的测试。鉴于我已经不得不为我的 Robolectric 测试使用 androidTest
变体,我怎样才能将我的插桩测试添加到这个项目,并且仍然允许 Robolectric 测试到 运行 没有设备?
这是超级过时的设置,我建议:
使用最新的稳定版 android gradle 插件:
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
移除Robolectric gradle 插件:
//apply plugin: 'robolectric'
//robolectric {
// include '**/*Test.class'
//}
将测试源移动到 test
文件夹
- 将
androidTestCompile
更改为testCompile
现在您可以 运行 使用 ./gradlew test<Flavour>DebugUnitTest
进行测试。您可以将仪器测试添加到 androidTest
文件夹。
同时考虑将 Robolectric 升级到 3.1
版本
我有一个 Android 项目,它使用 Robolectric 进行测试。 build.gradle 的相关部分看起来有点像这样:
apply plugin: 'robolectric'
robolectric {
include '**/*Test.class'
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile 'org.hamcrest:hamcrest-integration:1.1'
androidTestCompile 'org.hamcrest:hamcrest-core:1.1'
androidTestCompile 'org.hamcrest:hamcrest-library:1.1'
androidTestCompile('junit:junit:4.12') {
exclude module: 'hamcrest-core'
}
androidTestCompile('org.robolectric:robolectric:2.4') {
exclude module: 'classworlds'
exclude module: 'commons-logging'
exclude module: 'httpclient'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-project'
exclude module: 'maven-settings'
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-provider-api'
}
androidTestCompile 'com.android.support:support-v4:21.0.3'
}
并且所有 Robolectric 测试都在 src/androidTest/java/my/package/*Test.java
中。这一切都运作良好。我可以 运行 将测试作为正常 Gradle 构建的一部分,或者通过 IntelliJ 的 JUnit GUI。
现在我需要添加一些无法使用 Robolectric 并且需要在真实 Android 设备上 运行 的测试。鉴于我已经不得不为我的 Robolectric 测试使用 androidTest
变体,我怎样才能将我的插桩测试添加到这个项目,并且仍然允许 Robolectric 测试到 运行 没有设备?
这是超级过时的设置,我建议:
使用最新的稳定版 android gradle 插件:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.1.0' } }
移除Robolectric gradle 插件:
//apply plugin: 'robolectric' //robolectric { // include '**/*Test.class' //}
将测试源移动到
test
文件夹- 将
androidTestCompile
更改为testCompile
现在您可以 运行 使用 ./gradlew test<Flavour>DebugUnitTest
进行测试。您可以将仪器测试添加到 androidTest
文件夹。
同时考虑将 Robolectric 升级到 3.1
版本