键入Android Junit4不存在例外

sar*_*rpu 22 android junit4 kotlin android-gradle-plugin

我有一个Android项目,我试图运行使用AndroidStudio的Instrumentation测试,但是当我尝试运行测试的整个类文件时,我得到以下例外:

java.lang.TypeNotPresentException: Type android.support.test.runner.AndroidJUnit4 not present
Caused by: java.lang.ClassNotFoundException: android.support.test.runner.AndroidJUnit4
Run Code Online (Sandbox Code Playgroud)

有趣的是,我可以在这个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'
}
Run Code Online (Sandbox Code Playgroud)

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

    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助/指导,谢谢.

Boh*_*sen 45

这是由于Android Studio尝试将检测测试作为JUnit测试执行而引起的。

我必须转到“编辑配置...”,然后从Android JUnit组中删除该配置,然后手动将其添加到“ Android Instrumented Tests”组中。在此之后,我毫无疑问地执行了测试。

在Android Studio中,点击Run > Edit Configurations

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

  • 但是,为什么Android Studio继续尝试将其添加到JUnit测试中,而不是已检测的测试中?我不想为每个测试手动调整配置。 (7认同)
  • 这是正确的,应该被接受为正确答案。 (3认同)

Tar*_*run 9

写步骤,如果有人面临的问题,同时编辑配置上面@ 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 组中删除并再次运行它,它工作正常。