当我使用:
运行基于android模拟器的测试时gradlew check connectedCheck
......它失败了:
com.android.dx.util.DexException: Multiple dex files define Lorg/hamcrest/Description;
这是我的build.gradle文件:
buildscript {
repositories {
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.0'
classpath 'com.squareup.gradle:gradle-android-test-plugin:0.9.1-SNAPSHOT'
}
}
apply plugin: 'android'
apply plugin: 'android-test'
repositories {
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}
task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
gradleVersion = '1.9'
}
android {
compileSdkVersion 17
buildToolsVersion "18.1"
defaultConfig {
minSdkVersion 13
targetSdkVersion 18
}
sourceSets {
instrumentTest.setRoot('src/test')
}
lintOptions {
abortOnError false
}
}
dependencies {
compile 'com.android.support:support-v4:13.0.+'
compile fileTree(dir: 'libs', include: '*.jar')
testCompile 'junit:junit:4.10'
testCompile 'org.robolectric:robolectric:2.3-SNAPSHOT'
testCompile 'com.squareup:fest-android:1.0.+'
instrumentTestCompile 'junit:junit:4.10'
instrumentTestCompile 'org.robolectric:robolectric:2.3-SNAPSHOT'
instrumentTestCompile 'com.squareup:fest-android:1.0.+'
}
我使用的是Android Studio,但测试是从命令行运行的。
使用roboelectric(gradlew test
)运行基于非模拟器的测试工作正常。
我相信它是一个包含两次的jar文件,但不知道哪一个以及如何修复。 建议?
修改
似乎导致问题的是instrumentTestCompile 'junit:junit:4.10'
行。但是,当我把它拿出来时,机电测试不能编译。我该如何配置它以便我可以运行基于模拟器和基于roboeletric的测试?
答案 0 :(得分:2)
这是因为JUnit 4.10包含一些Hamcrest类(顽皮)。它已在4.11中修复,因此只需升级。