Escriba Android Junit4 no presente excepción

5 minutos de lectura

avatar de usuario
sargento de simulacros

Tengo un proyecto de Android en el que intento ejecutar pruebas de instrumentación para usar AndroidStudio, pero cuando intento ejecutar todo el archivo de clase para las pruebas, obtengo las excepciones que se indican a continuación:

java.lang.TypeNotPresentException: Type android.support.test.runner.AndroidJUnit4 not present
Caused by: java.lang.ClassNotFoundException: android.support.test.runner.AndroidJUnit4

Curiosamente, puedo ejecutar métodos individuales en esta clase de prueba de instrumentos, pero no en toda la clase. Mi archivo build.gradle para la aplicación está a continuación:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    lintOptions {
        abortOnError false
    }
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.sarpuner.journal"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    buildToolsVersion '27.0.3'
}

repositories {
    maven { url "https://dl.bintray.com/ijabz/maven" }
}

dependencies {
    androidTestImplementation 'com.android.support:support-annotations:27.1.1'
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'dev.dworks.libs:volleyplus:0.1.4'
    implementation 'com.google.code.gson:gson:2.8.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'org.jsoup:jsoup:1.11.3'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.1'
    implementation 'net.jthink:jaudiotagger:2.2.3'
    api 'com.google.guava:guava:26.0-android'
}

Y la clase InstrumentTest es la siguiente:

package com.sarpuner.journal

import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4
import android.util.Log    
import org.junit.Test
import org.junit.runner.RunWith    
import org.junit.Assert.*
import java.io.File

private const val INSTRUMENT_TAG = "InstrumentTest"

// TODO: There is a problem here with the class run!

@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {

    private val appContext = InstrumentationRegistry.getTargetContext()

    @Test
    fun useAppContext() {
        // Context of the app under test.
        assertEquals("com.sarpuner.journal", appContext.packageName)
    }

    @Test
    fun downloadAndSaveAudio() {
        val url = "http://telechargement.rfi.fr/rfi/francais/audio/jff/201808/journal_francais_facile_20h00_-_20h10_tu_20180809.mp3"
        val name = "09-08-2018.mp3"
        val f = File(appContext.filesDir, name)
        Log.d(INSTRUMENT_TAG, f.absolutePath)
        downloadAudio(url, f)
    }

    @Test
    fun downloadAndSaveTranscript() {
        val url = "https://savoirs.rfi.fr/fr/apprendre-enseigner/langue-francaise/journal-en-francais-facile-09082018-20h00-gmt"
        val name = "09-08-2018.txt"
        val f = File(appContext.filesDir, name)

        downloadText(url, f)
    }

    @Test
    fun addLyricsToAudio() {

    }
}

Cualquier ayuda/orientación es muy apreciada, gracias.

avatar de usuario
Bohsen

Esto se debe a que Android Studio intenta ejecutar una prueba de instrumentación como una prueba JUnit.

Tuve que ir a ‘Editar configuraciones…’ y eliminar la configuración del grupo Android JUnit y agregar manualmente al grupo ‘Pruebas instrumentadas de Android’. Después de esto no tuve problemas para ejecutar las pruebas.

En Android Studio, haga clic en Run > Edit Configurations.

https://developer.android.com/studio/run/rundebugconfig

  • Esto es correcto y debe aceptarse como una respuesta correcta.

    – Sattar Hummatli

    9 de julio de 2019 a las 16:06

  • @Bohsen ¿Cómo hacer eso, algún paso?

    – Tarún

    6 de agosto de 2019 a las 4:21


  • ¿Por qué Android Studio continúa intentando agregarlo a las pruebas JUnit en lugar de las pruebas instrumentadas? No quiero tener que ajustar manualmente la configuración para cada prueba.

    – FuturoSorprendido

    12 sep 2019 a las 18:21

  • @FutureShocked en mi caso, la razón fue que el dispositivo no se reconoció correctamente. Tuve un problema general de reconocimiento USB con mi dispositivo. Además, algunos teléfonos solicitan permiso para permitir el acceso desde la PC

    –Michael Troger

    26 de noviembre de 2019 a las 12:20

  • Continúo enfrentándome a este problema y uso bastante estrictamente un emulador para pruebas instrumentadas.

    – FuturoSorprendido

    26 de noviembre de 2019 a las 18:21

avatar de usuario
Tarún

Pasos de escritura si alguien enfrenta un problema mientras edita la configuración para la respuesta anterior de @Bohsenr

  1. En Android Studio, haga clic en Run > Edit Configurations (o presione alt + shift + f10 si está en Windows) para abrir el editor de configuración.
  2. El panel izquierdo de la ventana muestra las configuraciones y sus grupos.
    • Grupo Android JUnit
    • Pruebas instrumentadas de Android

Si su prueba es una prueba de instrumentación, elimínela de cualquier grupo de pruebas JUnit.

Si su prueba es una prueba JUnit, elimínela de cualquier grupo de pruebas de instrumentación.

Por ejemplo, mi prueba (DBTest.kt) aparecía en ambos Sección de Android JUnit y grupo Instrumentado. Así que eliminé del grupo JUnit y lo ejecuté nuevamente, funcionaba bien.

Con suerte, alguien puede darte una mejor respuesta de por qué, pero tuve exactamente el mismo problema. Hice lo siguiente:

  • Construir > Proyecto limpio,
  • Ejecutó la aplicación en el emulador

Una vez hecho esto, pude volver a un estado en el que podía ejecutar las pruebas nuevamente.

  • stackoverflow.com/questions/39282282/… También parece ayudar

    – willcwf

    22/09/2018 a las 19:05

  • Las pruebas unitarias de Android Studio son escamosas como el infierno. Tuve que borrar cachés y limpiar compilaciones en casi cada paso. Hace que TDD sea muy tedioso.

    –Rupert Rawnsley

    30 de enero de 2019 a las 10:26

Yo tuve lo mismo con:

Type androidx.test.ext.junit.runners.AndroidJUnit4 not present

Probé muchas cosas antes de eliminar manualmente la aplicación del dispositivo y volver a ejecutar la prueba. ¡Espero que esto ayude!

Para mí, esto en realidad parecía ser causado por un problema de conexión a Internet. Apagar y encender wifi fijo y reconstruir parecía arreglar.

avatar de usuario
Veniamin

Recibí este problema cuando hice mis pruebas en el emulador.

Lo arreglé descargando una nueva copia del proyecto del repositorio de git.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad