没找到类"android.support.test.runner.AndroidJUnitRunner"

gur*_*gui 17 android

我正在尝试使用检测测试,并将我的项目更新为AndroidX.但是在尝试运行时出现以下错误:

2018-10-09 14:22:29.468 13263-13263/xxx.yyy E/AndroidRuntime: FATAL EXCEPTION: main
    Process: xxx.yyy, PID: 13263
    java.lang.RuntimeException: Unable to instantiate instrumentation ComponentInfo{xxx.yyy.test/android.support.test.runner.AndroidJUnitRunner}: java.lang.ClassNotFoundException: Didn't find class "android.support.test.runner.AndroidJUnitRunner" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5730)
        at android.app.ActivityThread.-wrap1(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.test.runner.AndroidJUnitRunner" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5728)
        at android.app.ActivityThread.-wrap1(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
Run Code Online (Sandbox Code Playgroud)

我的测试看起来像这样:

package xxx.yyy;

import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.*;

/**
 * Instrumented test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        assertEquals("xxx.yyy", appContext.getPackageName());
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 37

build.gradle文件中,您可以找到该defaultConfig部分.使用该testInstrumentationRunner属性,可以指定相应的测试运行器.android.support可能会指定包中的测试运行器:

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
Run Code Online (Sandbox Code Playgroud)

这必须从androidx包中更改为测试运行器:

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
Run Code Online (Sandbox Code Playgroud)

  • 这为我解决了这个问题 (2认同)

Dan*_*iil 18

当我忘记向 android 测试运行程序添加依赖项时,我遇到了同样的问题。
所以添加这个有帮助:

androidTestImplementation("androidx.test:runner:1.2.0")
Run Code Online (Sandbox Code Playgroud)


ʍѳђ*_*ઽ૯ท 14

没有找到类" android.support .test.runner.AndroidJUnitRunner"

您迁移到了,AndroidX但正如您所看到的,您的项目中仍然存在android.support测试库的用法.

要解决这个问题,您应该在项目的任何位置搜索任何内容,android.support并将其替换或删除以使用AndroidX库.

  • @Stefan 实际上,`AppCompatActivity` 有它的`androidx` 对应物:`androidx.appcompat.app.AppCompatActivity` :) (2认同)
  • 我没有迁移到 AndroidX,但在这里遇到了同样的问题。有任何想法吗?顺便说一句,我在我的项目中启用了 multidex。 (2认同)