Тип Android Junit4 отсутствует исключение

У меня есть проект Android, в котором я пытаюсь запустить тесты инструментовки для использования AndroidStudio, но когда я пытаюсь запустить весь файл класса для тестов, я получаю исключения, как указано ниже:

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

Интересно, что в этом классе Instrument Test я могу запускать отдельные методы, но не весь класс. Мой файл build.gradle для приложения находится ниже:

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'
}

И класс InstrumentTest выглядит следующим образом:

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() {

    }
}

Любая помощь/руководство очень ценится, спасибо.

Ответы

Ответ 1

Это вызвано тем, что Android Studio пытается выполнить инструментальный тест как тест JUnit.

Мне пришлось перейти в "Редактировать конфигурации...", удалить конфигурацию из группы Android JUnit и вручную добавить в группу "Инструментов Android Instrumented Tests". После этого у меня не было проблем с выполнением тестов.

В Android Studio нажмите Run > Edit Configurations.

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

Ответ 2

Надеюсь, кто-то может дать вам лучший ответ о том, почему, но у меня была такая же проблема. Я сделал следующее:

  • Build> Clean Project,
  • Запустите приложение на эмуляторе

Это было сделано, я смог вернуться в состояние, в котором я мог снова запустить тесты.

Ответ 3

Написание шагов, если кто-то столкнулся с проблемой во время редактирования конфигурации выше @Bohsen answe r

  1. В Android Studio нажмите Run > Edit Configurations (или нажмите alt + shift + f10, если в Windows), чтобы открыть редактор конфигурации.
  2. Левая панель окна показывает конфигурации и их группы.
    • Android JUnit group
    • Инструментальные тесты Android

Если ваш тест является инструментальным, удалите его из любой группы тестов JUnit.

Если ваш тест является тестом JUnit, удалите его из любых групп инструментальных тестов.

Например, мой тест (DBTest.kt) появлялся как в разделе Android JUnit, так и в разделе Инструментированные группы. Поэтому я удалил из группы JUnit и снова запустил, все работало нормально.

Ответ 4

У меня было то же самое с:

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

Я много чего перепробовал, прежде чем вручную удалить приложение с устройства и снова запустить тест. Надеюсь это поможет!