Android Gradle Unit Prueba de migración de JARs – duplicar los archivos hamcrest de junit y mockito
Por fin estoy migrando mis viejas pruebas de unidad que se ejecutaron con archivos JAR usando gradle pero estoy teniendo muchos problemas para obtener la combinación correcta y no estoy seguro de lo que estoy haciendo bien o mal. En primer lugar, estos son todos los archivos jar que estoy usando.
dexmaker-1.0.jar dexmaker-mockito-1.0.jar fest-android-1.0.7.jar fest-assert-core-2.0M10.jar fest-util-1.2.5.jar junit-4.11.jar mockito-all-1.9.5.jar the-missing-android-xml-junit-test-runner-release-1.3_2.jar <---- I think this is used to get reports for the unit tests, is there a way that I don't have to use this anymore?
Cuando tengo todos estos JAR importados como JARs como el siguiente funciona bien, por lo que es una buena cosa, pero no es ideal:
- Actividad de prueba onCreate Exception
- Mocking up WifiManager para la prueba de unidad Android
- Integrar roboelectric con android studio con gradle siempre da paquetes org.junit no existe error
- Pruebas de ejecución automática antes de la compilación de aplicaciones en Android Studio
- Dagger 2 generó el componente de prueba no reconocido
androidTestCompile fileTree(dir: 'libs/test', include: '*.jar')
A continuación, traté de cambiar todos los archivos JAR a dependencias gradle-maven como las siguientes
androidTestCompile fileTree(dir: 'libs/test', include: '*.jar') androidTestCompile 'junit:junit:4.11+' androidTestCompile ('com.squareup:fest-android:1.0.+') { exclude group: 'com.android.support' } androidTestCompile 'org.easytesting:fest-assert-core:2.0M10' androidTestCompile 'org.easytesting:fest-util:1.2.+' androidTestCompile 'org.mockito:mockito-all:1.9.+' androidTestCompile 'com.google.dexmaker:dexmaker:1.+' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.+'
Esto no funcionó porque al intentar construir y ejecutar las pruebas de unidad, obtuve el siguiente resultado:
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lorg/hamcrest/Description; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) ...
Así que miré a unos cuantos lugares para ayudarme a resolver esto, Android Gradle DexException: Múltiples archivos dex definir Lorg / hamcrest / Descripción Prueba de Android: 'Múltiples archivos dex' cuando se utiliza 'gradle check connectedCheck' Android + Powermock + Mockito + Maven construir error con ClassNotFoundException , y sugirieron que intento lo siguiente:
androidTestCompile fileTree(dir: 'libs/test', include: '*.jar') androidTestCompile('junit:junit:4.11+') { exclude group: 'org.hamcrest' } androidTestCompile ('com.squareup:fest-android:1.0.+') { exclude group: 'com.android.support' } androidTestCompile 'org.easytesting:fest-assert-core:2.0M10' androidTestCompile 'org.easytesting:fest-util:1.2.+' androidTestCompile 'org.mockito:mockito-all:1.9.+' androidTestCompile 'com.google.dexmaker:dexmaker:1.+' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.+'
y
androidTestCompile fileTree(dir: 'libs/test', include: '*.jar') androidTestCompile 'junit:junit:4.11+' androidTestCompile ('com.squareup:fest-android:1.0.+') { exclude group: 'com.android.support' } androidTestCompile 'org.easytesting:fest-assert-core:2.0M10' androidTestCompile 'org.easytesting:fest-util:1.2.+' androidTestCompile('org.mockito:mockito-all:1.9.5') { exclude group: 'org.hamcrest' } androidTestCompile 'com.google.dexmaker:dexmaker:1.+' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.+'
pero el todavía rindió lo siguiente:
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lorg/hamcrest/Description; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
He intentado lo siguiente para cambiar el junit y mockito de acuerdo a algunas recomendaciones.
androidTestCompile 'junit:junit-dep:4.11+' androidTestCompile 'org.mockito:mockito-core:1.9.+'
Y tengo
Error: duplicate files during packaging of APK /.../app/build/outputs/apk/app-debug-test-unaligned.apk Path in archive: LICENSE.txt Origin 1: /.../.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar Origin 2: /.../.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar You can ignore those files in your build.gradle: android { packagingOptions { exclude 'LICENSE.txt' } } FAILED FAILURE: Build failed with an exception. Execution failed for task ':app:packageDebugTest'.
Archivos duplicados copiados en APK LICENSE.txt Archivo 1: /Users/simonadmin/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar Archivo 2: / Users / simonadmin / .gradle / caches / modules-2 / files-2.1 / junit / junit / 4.11 / 4e031bb61df09069aeb2bffb4019e7a5034a4ee0 / junit-4.11.jar
¿Alguna recomendación o ayuda con esto? No quiero volver a usar los JARs.
- Android ejecutando script de hormigas en el dispositivo ejecutando casos de prueba y generando un informe de cobertura de código
- "La prueba no se ejecutó hasta la finalización." Motivo: 'La instrumentación ejecutada falló debido a' El proceso se estrelló. '' Mientras se ejecutan varios testcases
- Prueba de unidad Android, getString del recurso
- Dos robotium caso de prueba, pero el segundo colgar no responde (en JUnit View)
- Cobertura de código Emma para la prueba de androide JUnit
- Android studio dice "Empty Test Suite" para AndroidTestCase
- "Los animadores sólo se pueden ejecutar en subprocesos Looper" durante las pruebas de instrumentación en dispositivo
- Android JUnit Pruebas ... Cómo esperar una excepción
En realidad, me di cuenta de que en el final por la adición y funcionó.
android { // stuff before packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'LICENSE.txt' } }
Y mis dependencias tienen las siguientes
dependencies { androidTestCompile ('com.squareup:fest-android:1.0.+') { exclude group: 'com.android.support' } androidTestCompile 'com.google.dexmaker:dexmaker:1.+' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.+' androidTestCompile 'junit:junit:4.11' androidTestCompile 'org.hamcrest:hamcrest-library:1.3' androidTestCompile 'org.mockito:mockito-core:1.9.5' }
También estoy afrontando el mismo problema.
Well @lazypig ha mencionado la versión final de sus secciones build.gradle.
Pero la razón es que org.hamcrest.Description
está empaquetado en mockito-all.jar
. Por lo tanto, cuando la dependencia se cambió a mockito-core
, sólo había un hamcrest-core.jar
en el classpath que provenía de junit.jar
.
Sin embargo, todavía no soy capaz de averiguar por qué la exclude
no está funcionando en este escenario!
- Efecto de ondulación de material oculto por otra vista en el diseño
- Cambiar el color del cursor de searchView