简体   繁体   English

android 单元测试 + robolectric 3.0 + java.lang.LinkageError:加载器约束违规

[英]android unit test + robolectric 3.0 + java.lang.LinkageError: loader constraint violation

Error:错误:

java.lang.LinkageError: loader constraint violation: when resolving method "com.example.demo.utils.R.init(Landroid/content/Context;)V" the class loader (instance of org/robolectric/internal/bytecode/InstrumentingClassLoader) of the current class, com/example/test/FirstTest, and the class loader (instance of sun/misc/Launcher$AppClassLoader) for the method's defining class, com/example/demo/utils/R, have different Class objects for the type android/content/Context used in the signature java.lang.LinkageError:加载器约束冲突:解析方法“com.example.demo.utils.R.init(Landroid/content/Context;)V”时类加载器(org/robolectric/internal/bytecode/InstrumentingClassLoader的实例) ) 的当前类 com/example/test/FirstTest 和方法定义类 com/example/demo/utils/R 的类加载器(sun/misc/Launcher$AppClassLoader 的实例)具有不同的 Class 对象签名中使用的类型 android/content/Context

test code:测试代码:

    @runwith(RobolectricGradleTestRunner.class)
    @config(constants = BuildConfig.class,sdk = 21,application = TestApplication.class)
    public class FirstTest{
            @test
            public void testCase01(){
                 MainActivity mainActivity =  Robolectric.setupActivity(MainActivity.class);
                ....
           }
        }

build.gradle:构建.gradle:

dependencies {
    testCompile 'junit:junit:4.12'
    testCompile "org.robolectric:robolectric:3.0"
    testCompile 'org.robolectric:shadows-httpclient:3.0'
...
}

src/test/java/.../TestApplication: src/test/java/.../TestApplication:

    public class TestApplication extends Application {
    }

com/example/demo/MainActivity: com/example/demo/MainActivity:

    public class MainActivity extends Activity {
        @override
        protected void onCreate(Bundle savedInstanceState) {
        ...
        com.example.demo.utils.R.init(getApplicationContext());
        ...
        }
    }

com/example/demo/utils/R: com/example/demo/utils/R:

    public final class R {
        public static Resources resources;
        private static String packageName;
        public static void init(Context paramContext) {
           resources = paramContext.getResources();
           packageName = paramContext.getPackageName();
        }
    ...
    }

I find the reason why tests run fail is using a class named com.example.demo.utils.R , which has a conflict with an R class autogenerated by the Android System.我发现测试运行失败的原因是使用名为com.example.demo.utils.R的类,该类与 Android 系统自动生成的R类存在冲突。 If you rename R to another name, like Ra , it works.如果您将R重命名为另一个名称,例如Ra ,它会起作用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 powermock 错误 java.lang.LinkageError:加载器约束冲突:解析方法“android.support.v4.app 时” - powermock error java.lang.LinkageError: loader constraint violation: when resolving method "android.support.v4.app java.lang.LinkageError:MainActivity - java.lang.LinkageError: MainActivity Android Studio cwac相机CameraFragment java.lang.LinkageError - Android Studio cwac-camera CameraFragment java.lang.LinkageError Robolectric 3.0测试-Android - Robolectric 3.0 Test - Android robolectric 单元测试 android 计时器 - robolectric unit test android Timer 使用Xamarin注册Google Cloud Messaging时出现Java.Lang.LinkageError - Java.Lang.LinkageError when registering for Google Cloud Messaging using Xamarin 使用Robolectric进行Android库JUnit测试:java.lang.InstantiationException - Android Library JUnit Test with Robolectric: java.lang.InstantiationException Android + Robolectric测试错误“ java.lang.RuntimeException:存根!” - Android+Robolectric Test ERROR “java.lang.RuntimeException: Stub!” 在 robolectric 单元测试中添加影子类时抛出 LinkageError 和 IllegalAccessException 异常 - LinkageError and IllegalAccessException exception thrown when I add shadow class in robolectric unit test 用于Marshmallow PermissionHelper的Android Robolectric单元测试 - Android Robolectric unit test for Marshmallow PermissionHelper
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM