Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

[Bug] Testes instrumentados não encontrados

Olá, estou passando por problemas durante a execução do primeiro teste instrumentado montado no curso no módulo de introdução ao Espresso.

O log é o seguinte:

Test run failed to complete. Instrumentation run failed due to Process crashed.

FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':app:connectedDebugAndroidTest'.

    There were failing tests. See the report at: file:///C:/Projetos/app-repositories/android-projects/orgs/app/build/reports/androidTests/connected/index.html

  • Try:

    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 51s 66 actionable tasks: 26 executed, 40 up-to-date


Acessando o index.html: Insira aqui a descrição dessa imagem para ajudar na acessibilidade: Estou usando a IDE Android Studio Electric Eel e as minhas versões são:

AGP: 7.4.1 Gradle: 8.0 Kotlin: 1.8.0 Java: 19 SDK Android: 33

Estou usando JUnit 5 para os testes unitários e JUnit 4 para dar suporte a esses testes instrumentados.

Agradeço se puderem me ajudar nesse problema!

6 respostas

Meu app/build.gradle:

plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' id 'kotlin-parcelize' }

android { compileSdk 33

defaultConfig {
    applicationId "com.example.orgs"
    minSdk 22
    targetSdk 33
    versionCode 1
    versionName "1.0"

    // Runner for JUnit 4
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    // Runner for JUnit 5
    testInstrumentationRunner "org.junit.platform.runner.JUnitPlatformRunner"

    kapt {
        arguments {
            arg("room.schemaLocation", "$projectDir/schemas")
            arg("room.incremental", "true")
        }
    }
}

buildFeatures {
    viewBinding true
    dataBinding true
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_19
    targetCompatibility JavaVersion.VERSION_19
}

kotlinOptions {
    jvmTarget = '19'
}

packagingOptions {
    pickFirst 'META-INF/LICENSE.md'
    pickFirst 'META-INF/LICENSE-notice.md'
}

testOptions {
    unitTests.all {
        useJUnitPlatform()
    }
}

sourceSets {
    String sharedTestDir = 'src/sharedTest/java'
    test {
        java.srcDir sharedTestDir
    }
    androidTest {
        java.srcDirs = [
                'src/androidTest/java',
                sharedTestDir,
        ]
    }
}

}

dependencies { // Lib versions def room_version = "2.4.3" def kotlin_coroutines_version = "1.6.4" def lifecycle_version = "2.5.1" def junit_jupiter_version = "5.9.2" def faker_version = "1.13.0" def arch_version = "1.0.0-alpha5"

// Annotation processor
kapt "androidx.room:room-compiler:$room_version"

// Core
implementation "androidx.core:core-ktx:1.9.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"

// UI
implementation "androidx.appcompat:appcompat:1.6.1"
implementation "com.google.android.material:material:1.8.0"
implementation "androidx.recyclerview:recyclerview:1.2.1"
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "com.android.databinding:viewbinding:7.4.2"
implementation 'io.coil-kt:coil:2.2.2'

// Room
implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version"
androidTestImplementation "androidx.room:room-testing:$room_version"
androidTestImplementation "android.arch.persistence.room:testing:$arch_version"

// Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlin_coroutines_version"

// DataStore (Preferences)
implementation "androidx.datastore:datastore-preferences:1.0.0"

// JUnit 4 (Only for Android Tests)
androidTestImplementation "junit:junit:4.12"
androidTestImplementation "androidx.test.ext:junit-ktx:1.1.5"
androidTestImplementation 'org.junit.platform:junit-platform-runner:1.8.1'
androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
androidTestImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

// JUnit 5 (Only for Unit Tests)
testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_jupiter_version"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_jupiter_version"

// Espresso
androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1"
androidTestImplementation "androidx.test:core:1.5.0"
androidTestImplementation "androidx.test:runner:1.5.2"
androidTestImplementation "androidx.test:rules:1.5.0"

// Test Helpers
implementation "io.github.serpro69:kotlin-faker:$faker_version"
testImplementation "org.amshove.kluent:kluent-android:1.72"
testImplementation "io.mockk:mockk:1.13.4"

}

Minha classe de teste:

package com.example.orgs.ui.activity

import androidx.test.core.app.ActivityScenario import androidx.test.espresso.Espresso import androidx.test.espresso.assertion.ViewAssertions import androidx.test.espresso.matcher.ViewMatchers import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Test import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class) class ListaProdutosActivityTest { @Test fun mustDisplayCorrectActivityNameInAppbar() { // Arrange activity view val scenario = ActivityScenario.launch(ListaProdutosActivity::class.java)

    // Assert widget text
    val viewInteraction = Espresso.onView(ViewMatchers.withText("Lista de produtos"))
    viewInteraction.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))

    // Close activity
    scenario.close()
}

}

Olá Marcelo, tudo bem?

Poderia nos enviar seu projeto via github ?

Existem diversas questões que podem levar a esse tipo de erro, então fica mais fácil pra gente analisar com o projeto todo.

Qualquer coisa estarei à disposição :)

Claro, segue o código:

https://github.com/Franco904/orgs/tree/android-test

solução!

Opa Marcelo, tudo bem?

Conseguimos encontrar uma possível solução:

No seu build.gradle a nível de app comente o seguinte trecho:

android {
   ...

        // Runner for JUnit 4
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        // Runner for JUnit 5
//        testInstrumentationRunner "org.junit.platform.runner.JUnitPlatformRunner" <--- CÓDIGO COMENTADO

        kapt {
            ...
            }
        }
    }

O fato de seus testes instrumentados estarem falhando pode ter ocorrido por vários motivos, incluindo problemas na configuração do ambiente, problemas no código de teste ou problemas com as dependências. No entanto, comentar a linha de código do "Runner for JUnit 5" pode ter resolvido o problema porque você estava usando a biblioteca JUnit 4, que é a biblioteca padrão de testes do Android e é mais compatível com o ambiente de teste padrão do Android.

Para usar o JUnit 5, você precisa fazer algumas configurações adicionais no ambiente de teste, como incluir as bibliotecas necessárias e especificar o "Runner for JUnit 5". Se você não fez essas configurações adequadamente, pode ter causado problemas nos seus testes instrumentados.

Se ficar qualquer dúvida, estarei à disposição :)

Era isso mesmo! Depois de resolver esse conflito, o teste foi identificado direitinho, muito obrigado Matheus e equipe.