簡體   English   中英

帶有片段的 Android 濃縮咖啡。 getActivity 返回 NULL

[英]Android espresso with Fragments. getActivity returns NULL

我正在嘗試在一個簡單的活動上使用 Espresso 運行一些集成測試,該活動一旦啟動就會觸發加載程序來檢索一些數據。

問題是,當我運行我的測試(甚至非常簡單,例如檢查主頁上是否有按鈕)時,結果不斷變化,並且我不斷獲得 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()
                )));
    }
}

謝謝大家的幫助

像這個例子一樣改變你的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

暫無
暫無

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

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