2011-06-13 125 views
2

我有以下設置:ActivityInstrumentationTestCase2和android庫項目:資源加載失敗

  • LibProjectWithActivity - 一個Android庫項目包含PreviewActivity
  • AppProject - 平常的Android項目,該項目使用LibProjectWithActivity
  • AppProjectTest - 一個Android JUnit測試項目,該項目是一個ActivityInstumentationTestCase2

首先:所有基本依賴關係的設置是否正確,因爲我可以完全啓動我的應用程序在模擬器,它顯示PreviewActivity剛剛好,東西工作 - 這裏沒有問題。

但我無法啓動測試......這裏的設置:

public class PreviewActivityTest 
     extends ActivityInstrumentationTestCase2<PreviewActivity> { 
    public PreviewActivityTest() { 
     // note: if i put "com.the7art.libprojectwithactivity" instead it wont find it 
     // and will fail with "activity not found" 
     super("com.the7art.appproject", PreviewActivity.class); 
    } 

    public void testDummy() { 
     getActivity(); 
    } 
} 

此拋出這樣一個NullPointerException:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.the7art.appproject/com.the7art.libprojectwithactivity.PreviewActivity}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    ....... 
Caused by: java.lang.NullPointerException 
    at com.the7art.libprojectwithactivity.PreviewActivity.onCreate(PreviewActivity.java:37) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
    ... 11 more 

這裏是行PreviewActivity.java:36,37:

mButtonAdd = (Button) findViewById(R.id.button_add); 
mButtonAdd.setOnClickListener(this); 

那麼這個例外意味着R.id.button_add(這在libproject)是PE完全找到,但通過此ID查看無法找到。如果我註釋掉這段代碼,當嘗試獲取另一個資源時它會崩潰。

看起來像測試使用右R.java,但錯誤的上下文對象。或者類似的東西。

再次,應用程序代碼是好的,因爲它工作在模擬器,什麼是錯與測試設置...

任何提示什麼是錯的,如何解決這一問題?

回答

1

是的,測試可以只使用Activity項目作爲目標,查看Test清單文件中的projectTarget。 這意味着您的測試可以使用與您的應用程序相同的上下文。只訪問應用程序的項目資源。但是,您無法訪問庫的項目資源,您可以使用庫項目中的R.string.XX,因爲它是第一次構建的,它只是一個生成的標識符,將在應用程序的上下文中用於查找資源。因此,結果將是找到的資源或資源未發現異常的錯誤。 有兩種方法來測試一個庫項目,here they are