J'ai essayé de tester mon code avec robolectric. Le problème est qu'il a des références dupliquées. par exemple.
Java.lang.RuntimeException: Java.lang.RuntimeException: Duplicate class org.Apache.maven.artifact.Artifact found in modules maven-ant-tasks-2.1.3.jar (org.Apache.maven:maven-ant-tasks:2.1.3) and maven-artifact-2.2.1.jar (org.Apache.maven:maven-artifact:2.2.1)
J'ai utilisé l'artefact Gradel app:dependencies
pour obtenir le rapport suivant. Voici les parties importantes:
+--- org.robolectric:robolectric:4.3
| +--- org.robolectric:annotations:4.3
| +--- org.robolectric:junit:4.3
| | +--- org.robolectric:annotations:4.3
| | +--- org.robolectric:sandbox:4.3
| | | +--- org.robolectric:annotations:4.3
| | | +--- org.robolectric:utils:4.3
| | | | +--- org.robolectric:annotations:4.3
| | | | +--- org.robolectric:pluginapi:4.3
| | | | | +--- org.robolectric:annotations:4.3
| | | | | +--- org.Apache.ant:ant:1.8.0
| | | | | | \--- org.Apache.ant:ant-launcher:1.8.0
| | | | | \--- org.Apache.maven:maven-ant-tasks:2.1.3
| | | | | +--- org.Apache.ant:ant:1.8.0 (*)
| | | | | +--- classworlds:classworlds:1.1-alpha-2
| | | | | +--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1
| | | | | | +--- org.codehaus.plexus:plexus-utils:1.0.4 -> 1.5.15
| | | | | | \--- classworlds:classworlds:1.1-alpha-2
| | | | | +--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | +--- org.codehaus.plexus:plexus-interpolation:1.11
| | | | | +--- org.Apache.maven:maven-artifact:2.2.1
| | | | | | \--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | +--- org.Apache.maven:maven-artifact-manager:2.2.1
| | | | | | +--- org.Apache.maven:maven-repository-metadata:2.2.1
| | | | | | | \--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | | +--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | | +--- org.Apache.maven:maven-artifact:2.2.1 (*)
| | | | | | +--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
| | | | | | +--- org.Apache.maven.wagon:wagon-provider-api:1.0-beta-6
| | | | | | | \--- org.codehaus.plexus:plexus-utils:1.4.2 -> 1.5.15
| | | | | | \--- backport-util-concurrent:backport-util-concurrent:3.1
| | | | | +--- org.Apache.maven:maven-model:2.2.1
| | | | | | \--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | +--- org.Apache.maven:maven-project:2.2.1
| | | | | | +--- org.Apache.maven:maven-settings:2.2.1
| | | | | | | +--- org.Apache.maven:maven-model:2.2.1 (*)
| | | | | | | +--- org.codehaus.plexus:plexus-interpolation:1.11
| | | | | | | +--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | | | \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
| | | | | | +--- org.Apache.maven:maven-profile:2.2.1
| | | | | | | +--- org.Apache.maven:maven-model:2.2.1 (*)
| | | | | | | +--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | | | +--- org.codehaus.plexus:plexus-interpolation:1.11
| | | | | | | \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
| | | | | | +--- org.Apache.maven:maven-model:2.2.1 (*)
| | | | | | +--- org.Apache.maven:maven-artifact-manager:2.2.1 (*)
| | | | | | +--- org.Apache.maven:maven-plugin-registry:2.2.1
| | | | | | | +--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | | | \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
| | | | | | +--- org.codehaus.plexus:plexus-interpolation:1.11
| | | | | | +--- org.codehaus.plexus:plexus-utils:1.5.15
| | | | | | +--- org.Apache.maven:maven-artifact:2.2.1 (*)
| | | | | | \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
| | | | | +--- org.Apache.maven:maven-error-diagnostics:2.2.1
| | | | | | \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
| | | | | +--- org.Apache.maven:maven-settings:2.2.1 (*)
| | | | | +--- org.Apache.maven.wagon:wagon-file:1.0-beta-6
| | | | | | \--- org.Apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
| | | | | +--- org.Apache.maven.wagon:wagon-http-lightweight:1.0-beta-6
| | | | | | +--- org.Apache.maven.wagon:wagon-http-shared:1.0-beta-6
| | | | | | | +--- nekohtml:xercesMinimal:1.9.6.2
| | | | | | | +--- nekohtml:nekohtml:1.9.6.2
| | | | | | | \--- org.Apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
| | | | | | \--- org.Apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
| | | | | \--- org.Apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
| | | | +--- org.robolectric:utils-reflector:4.3
| | | | | +--- org.ow2.asm:asm:7.0
| | | | | +--- org.ow2.asm:asm-commons:7.0
| | | | | | +--- org.ow2.asm:asm:7.0
| | | | | | +--- org.ow2.asm:asm-tree:7.0
| | | | | | | \--- org.ow2.asm:asm:7.0
| | | | | | \--- org.ow2.asm:asm-analysis:7.0
| | | | | | \--- org.ow2.asm:asm-tree:7.0 (*)
| | | | | \--- org.ow2.asm:asm-util:7.0
| | | | | +--- org.ow2.asm:asm:7.0
| | | | | +--- org.ow2.asm:asm-tree:7.0 (*)
| | | | | \--- org.ow2.asm:asm-analysis:7.0 (*)
| | | | +--- com.google.auto.service:auto-service:1.0-rc4
| | | | | +--- com.google.auto:auto-common:0.8
| | | | | | \--- com.google.guava:guava:19.0 -> 27.0.1-jre
| | | | | | +--- com.google.guava:failureaccess:1.0.1
| | | | | | +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
| | | | | | +--- com.google.code.findbugs:jsr305:3.0.2
| | | | | | +--- org.checkerframework:checker-qual:2.5.2
| | | | | | +--- com.google.errorprone:error_prone_annotations:2.2.0
| | | | | | +--- com.google.j2objc:j2objc-annotations:1.1
| | | | | | \--- org.codehaus.mojo:animal-sniffer-annotations:1.17
| | | | | \--- com.google.guava:guava:23.5-jre -> 27.0.1-jre (*)
| | | | +--- javax.inject:javax.inject:1
| | | | \--- javax.annotation:javax.annotation-api:1.3.2
| | | +--- org.robolectric:shadowapi:4.3
| | | | \--- org.robolectric:annotations:4.3
| | | +--- org.robolectric:utils-reflector:4.3 (*)
| | | +--- javax.annotation:javax.annotation-api:1.3.2
| | | +--- javax.inject:javax.inject:1
| | | +--- org.ow2.asm:asm:7.0
| | | +--- org.ow2.asm:asm-commons:7.0 (*)
| | | \--- com.google.guava:guava:27.0.1-jre (*)
| | +--- org.robolectric:pluginapi:4.3 (*)
| | +--- org.robolectric:shadowapi:4.3 (*)
| | \--- org.robolectric:utils-reflector:4.3 (*)
| +--- org.robolectric:pluginapi:4.3 (*)
| +--- org.robolectric:resources:4.3
| | +--- org.robolectric:utils:4.3 (*)
| | +--- org.robolectric:annotations:4.3
| | +--- org.robolectric:pluginapi:4.3 (*)
| | \--- com.google.guava:guava:27.0.1-jre (*)
| +--- org.robolectric:sandbox:4.3 (*)
| +--- org.robolectric:utils:4.3 (*)
| +--- org.robolectric:utils-reflector:4.3 (*)
| +--- org.robolectric:plugins-maven-dependency-resolver:4.3
| | +--- org.robolectric:pluginapi:4.3 (*)
| | +--- org.robolectric:utils:4.3 (*)
| | +--- org.Apache.ant:ant:1.8.0 (*)
| | \--- org.Apache.maven:maven-ant-tasks:2.1.3 (*)
| +--- javax.inject:javax.inject:1
| +--- javax.annotation:javax.annotation-api:1.3.2
| +--- org.robolectric:shadows-framework:4.3
| | +--- org.robolectric:annotations:4.3
| | +--- org.robolectric:resources:4.3 (*)
| | +--- org.robolectric:pluginapi:4.3 (*)
| | +--- org.robolectric:shadowapi:4.3 (*)
| | +--- org.robolectric:utils:4.3 (*)
| | +--- org.robolectric:utils-reflector:4.3 (*)
| | +--- androidx.test:monitor:1.2.0 -> 1.3.0-alpha02 (*)
| | +--- com.almworks.sqlite4Java:sqlite4Java:0.282
| | +--- com.ibm.icu:icu4j:53.1
| | +--- com.google.Android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.1
| | | +--- org.hamcrest:hamcrest-core:1.3
| | | +--- org.hamcrest:hamcrest-library:1.3 (*)
| | | \--- com.google.protobuf:protobuf-Java:2.6.1
| | \--- androidx.annotation:annotation:1.0.0
| +--- org.bouncycastle:bcprov-jdk15on:1.52
| \--- androidx.test:monitor:1.2.0 -> 1.3.0-alpha02 (*)
Comment résoudre l'erreur de référence? Il me semble que le robolectric a la même classe dans différentes dépendances?
J'utilise le script de construction suivant: appliquez le plugin: 'com.Android.application'
apply plugin: 'idea'
idea {
module {
downloadJavadoc = true
downloadSources = true
}
}
Android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
useLibrary 'org.Apache.http.legacy'
useLibrary 'Android.test.runner'
useLibrary 'Android.test.base'
useLibrary 'Android.test.mock'
defaultConfig {
applicationId "com.example.sampleapp"
minSdkVersion 16
targetSdkVersion 28
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
dependencies {
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation 'androidx.test:core:1.2.1-alpha02'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'org.robolectric:robolectric:4.3'
// Mail-Versand
implementation 'com.Sun.mail:Android-mail:1.6.2'
implementation 'com.Sun.mail:Android-activation:1.6.2'
implementation 'androidx.appcompat:appcompat:1.0.2'//
implementation 'com.github.woxthebox:draglistview:1.6.6'
}
Comment y remédier?
Le problème sur github est ouvert: https://github.com/robolectric/robolectric/issues/5235
Enfin, lancez le test. J'ai exclu toutes les bibliothèques avec des classes dupliquées:
testImplementation ("org.robolectric:robolectric:4.3"){
exclude group: 'org.Apache.maven', module: 'maven-artifact'
exclude group: 'org.Apache.maven', module: 'maven-artifact-manager'
exclude group: 'org.Apache.maven', module: 'maven-model'
exclude group: 'org.Apache.maven', module: 'maven-plugin-registry'
exclude group: 'org.Apache.maven', module: 'maven-profile'
exclude group: 'org.Apache.maven', module: 'maven-project'
exclude group: 'org.Apache.maven', module: 'maven-settings'
exclude group: 'org.Apache.maven', module: 'maven-error-diagnostics'
exclude group: "org.Apache.maven.wagon"
}
Pas toutes les possibilités testes mais un test simple fonctionnait déjà.
Cela pourrait probablement être écrit de manière plus générale:
testImplementation ("org.robolectric:robolectric:4.3") {
exclude group "org.Apache.maven.wagon"
exclude group "org.Apache.maven"
}
ou même:
testImplementation ("org.robolectric:robolectric:4.3") {
exclude group "org.Apache.maven", name: "maven-ant-tasks"
}
car c'est maven-ant-tasks of pluginapi , qui tire org.Apache.maven
dépendances.
J'ai rencontré le même problème et ce qui m'a aidé, c'est que j'avais défini la dépendance roboélectrique deux fois dans le fichier Gradle, l'un avec androidTestImplementation et l'autre avec testImplementation, donc quand j'ai supprimé le premier problème de partie résolu !!!