2015-10-06 107 views
2

我正嘗試在Espresso上運行一些簡單的活動集成測試,這些活動一旦啓動就會觸發一個加載程序來檢索一些數據。帶碎片的Android咖啡。 getActivity返回NULL

的問題是,當我運行我的測試(例如即使是很簡單的檢查,如果一個按鈕是在主網頁)的結果是連續變化的,而且我不斷收到不同的時間NPE

試圖調用空對象上的虛擬方法 「android.content.Context.getApplicationContext()」 參考

我的活動是空的,並持有的片段,並且誤差可以得到跟蹤回時,啓動加載器,我問的背景

MyLoader loader = new MyLoader(getActivity(), certainUrl); 

由此我得到的回報getActivity()有時null,然後順着這個線(在Android Loader類,因爲該方法context.getApplicationContext被調用)拋出一個異常

這是我的測試類

public class HomeFragmentTest extends ActivityInstrumentationTestCase2<HomeActivity> { 

    private HomeActivity _activity; 

    public HomeFragmentTest() { 
     super(HomeActivity.class); 
    } 

    protected void setUp() throws Exception { 
     super.setUp(); 
     _activity = getActivity(); 
     injectInstrumentation(getInstrumentation()); 
    } 

    public void testButton() { 
     onView(withId(R.id.button)) 
       .check(matches(allOf(
         isDisplayed(), 
         ViewMatchers.isCompletelyDisplayed() 
       ))); 
    } 
} 

謝謝大家的幫助

回答

1

更改setUp方法就像這個例子:

public class FirstActivityUnitTest extends 

    android.test.ActivityUnitTestCase<FirstActivity> { 

    private FirstActivity activity; 

    public FirstActivityUnitTest() { 
    super(FirstActivity.class); 
    } 

    @Override 
    protected void setUp() throws Exception { 
    super.setUp(); 
    Intent intent = new Intent(getInstrumentation().getTargetContext(), 
     FirstActivity.class); 
    startActivity(intent, null, null); 
    activity = getActivity(); 
    } 

    @SmallTest 
    public void testSomething() { 
    // assertions here 
    } 

    @Override 
    protected void tearDown() throws Exception { 
    super.tearDown(); 
    } 
} 

還要檢查是否在build.gradle文件你有這些依賴關係:

android { 
    defaultConfig { 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
      } 
     } 

dependencies { 
    androidTestCompile 'com.android.support:support-annotations:23.+' 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' 
    androidTestCompile 'com.android.support.test:runner:0.4.1' 
    androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1' 
} 

這裏最重要的是聲明testInstrumentationRunner

相關問題