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