簡體   English   中英

android 單元測試 + robolectric 3.0 + java.lang.LinkageError:加載器約束違規

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

錯誤:

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

測試代碼:

    @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);
                ....
           }
        }

構建.gradle:

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

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

    public class TestApplication extends Application {
    }

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:

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

我發現測試運行失敗的原因是使用名為com.example.demo.utils.R的類,該類與 Android 系統自動生成的R類存在沖突。 如果您將R重命名為另一個名稱,例如Ra ,它會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM