输入 Android Junit4 不存在异常
Type Android Junit4 not present exception
我有一个 Android 项目,我正在尝试 运行 使用 AndroidStudio 进行仪器测试,但是当我尝试 运行 整个 class 文件进行测试,我得到如下所述的异常:
java.lang.TypeNotPresentException: Type android.support.test.runner.AndroidJUnit4 not present
Caused by: java.lang.ClassNotFoundException: android.support.test.runner.AndroidJUnit4
有趣的是,我可以 运行 本仪器测试中的个别方法 class,而不是整个 class。我的应用程序 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'
}
而InstrumentTestclass如下:
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() {
}
}
非常感谢help/guidance,谢谢。
希望有人能给你一个更好的答案,但我遇到了同样的问题。我做了以下事情:
- 构建 > 清理项目,
- 运行 模拟器上的应用程序
完成后,我能够回到可以再次 运行 测试的状态。
我也一样:
Type androidx.test.ext.junit.runners.AndroidJUnit4 not present
在从设备上手动删除应用程序并再次 运行 测试之前,我尝试了很多方法。希望这对您有所帮助!
这是由于 Android Studio 试图将仪器测试作为 JUnit 测试来执行。
我不得不转到 'Edit Configurations...' 并从 Android JUnit 组中删除配置,然后手动添加到 'Android Instrumented Tests' 组。在此之后我执行测试没有问题。
在 Android Studio 中,单击 Run > Edit Configurations
。
如果有人在为上述@Bohsen 的回答编辑配置时遇到问题,请编写步骤r
- 在 Android Studio 中,单击
Run > Edit Configurations
(如果在 Windows 上,则按 alt + shift + f10
)打开配置编辑器。
- window 的左侧面板显示配置及其组。
- Android JUnit 组
- Android 仪器化测试
如果您的测试是仪器测试,请将其从任何 JUnit 测试组中删除。
如果您的测试是 JUnit 测试,请将其从任何仪器测试组中删除。
例如,我的测试 (DBTest.kt) 出现在 Android JUnit 和 Instrumented 组的部分 中。所以我从 JUnit 组中删除并再次 运行 它,它工作正常。
对我来说,这实际上似乎是由互联网连接问题引起的。关闭和打开 wifi 已修复,重建似乎已修复。
我在模拟器上进行测试时遇到了这个问题。
我通过从 git 存储库下载新的项目副本来修复它。
我有一个 Android 项目,我正在尝试 运行 使用 AndroidStudio 进行仪器测试,但是当我尝试 运行 整个 class 文件进行测试,我得到如下所述的异常:
java.lang.TypeNotPresentException: Type android.support.test.runner.AndroidJUnit4 not present
Caused by: java.lang.ClassNotFoundException: android.support.test.runner.AndroidJUnit4
有趣的是,我可以 运行 本仪器测试中的个别方法 class,而不是整个 class。我的应用程序 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'
}
而InstrumentTestclass如下:
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() {
}
}
非常感谢help/guidance,谢谢。
希望有人能给你一个更好的答案,但我遇到了同样的问题。我做了以下事情:
- 构建 > 清理项目,
- 运行 模拟器上的应用程序
完成后,我能够回到可以再次 运行 测试的状态。
我也一样:
Type androidx.test.ext.junit.runners.AndroidJUnit4 not present
在从设备上手动删除应用程序并再次 运行 测试之前,我尝试了很多方法。希望这对您有所帮助!
这是由于 Android Studio 试图将仪器测试作为 JUnit 测试来执行。
我不得不转到 'Edit Configurations...' 并从 Android JUnit 组中删除配置,然后手动添加到 'Android Instrumented Tests' 组。在此之后我执行测试没有问题。
在 Android Studio 中,单击 Run > Edit Configurations
。
如果有人在为上述@Bohsen 的回答编辑配置时遇到问题,请编写步骤r
- 在 Android Studio 中,单击
Run > Edit Configurations
(如果在 Windows 上,则按alt + shift + f10
)打开配置编辑器。 - window 的左侧面板显示配置及其组。
- Android JUnit 组
- Android 仪器化测试
如果您的测试是仪器测试,请将其从任何 JUnit 测试组中删除。
如果您的测试是 JUnit 测试,请将其从任何仪器测试组中删除。
例如,我的测试 (DBTest.kt) 出现在 Android JUnit 和 Instrumented 组的部分 中。所以我从 JUnit 组中删除并再次 运行 它,它工作正常。
对我来说,这实际上似乎是由互联网连接问题引起的。关闭和打开 wifi 已修复,重建似乎已修复。
我在模拟器上进行测试时遇到了这个问题。
我通过从 git 存储库下载新的项目副本来修复它。