web-dev-qa-db-ja.com

タイプAndroid Junit4 not present exception

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

    }
}

どんな助け/ガイダンスも大歓迎です、ありがとう。

17
sarpu

これは、Android StudioがJUnitテストとしてインストルメンテーションテストを実行しようとするために発生します。

「構成の編集...」に進み、Android JUnitグループから構成を削除し、「Android Instrumented Tests」グループに手動で追加する必要がありました。この後、テストの実行に問題はありませんでした。 。

Android Studioで、Run > Edit Configurations

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

25
Bohsen

誰かがあなたにもっと良い答えを与えてくれることを願っていますが、私はこれとまったく同じ問題を抱えていました。私は次のことをしました:

  • ビルド>プロジェクトのクリーン、
  • エミュレーターでアプリを実行しました

これで、テストを再度実行できる状態に戻ることができました。

3
willcwf

上記の@Bohsenのansweの設定を編集中に誰かが問題に直面した場合のステップの作成 r

  1. Android Studioで、Run > Edit Configurations(またはalt + shift + f10(Windowsの場合)構成エディターを開きます。
  2. ウィンドウの左パネルには、構成とそのグループが表示されます。
    • Android JUnitグループ
    • Androidインストルメントテスト

テストがインストルメンテーションテストである場合、JUnitテストグループから削除します。

テストがJUnitテストの場合、インストルメンテーションテストグループから削除します。

たとえば、私のテスト(DBTest.kt)はAndroid JUnitとInstrumentedグループのセクションの両方に表示されていました。だから私はJUnitグループから削除して再度実行しましたが、うまくいきました。

1
Tarun

私も同じでした:

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

デバイスからアプリを手動で削除して、テストを再度実行する前に、多くのことを試しました。お役に立てれば!

0
Nico