2017-08-10 47 views
0

PersonListActivity触发,BaseFragmentActivity工作,我在onCreate顺序做内BaseFragmentActivity那些过程 - >doCreate - >initFragment。当调用fragment = createFragment();initFragment内,同时createFragment()功能工作这是PersonListActivity内,然后调用PersonListFragment ..的Android单元测试是片段nullpointexception

现在的问题是,当我在做这与单元测试环境(com.hpolat.example.personapp test。),PersonListFragment始终保持响应为nullpoinexception。我注意到在调试过程中PersonListFragment为空。我如何防止PersonListFragment不回应null。

感谢您的咨询!

应用代码;

PersonListActivity.class 

    public class PersonListActivity 
      extends BaseFragmentActivity 
    { 
     @Override 
     public Fragment createFragment() { 
      return PersonListFragment.newInstance(); 
     } 
    } 

BaseFragmentActivity.class

public abstract class BaseFragmentActivity 
     extends AppCompatActivity 
{ 
    private static final String FRG_ACTIVITY = "ActivityFragmentName"; 
    private Fragment mFragment; 

    protected abstract Fragment createFragment(); 

    @LayoutRes 
    protected int getLayoutResId() { 
     return R.layout.layout_fragment_container; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.doCreate(savedInstanceState); 

     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 

    protected void doCreate(Bundle savedInstanceState) { 
     setContentView(getLayoutResId()); 
     if (savedInstanceState != null) { 
      this.restoreState(savedInstanceState); 
     } 

     setExtraLayoutItems(); 

     initFragment(); 
    } 

    public void initFragment() { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     Fragment fragment = fragmentManager.findFragmentById(getFragmentContainerId()); 

     if (fragment == null) { 
      fragment = createFragment(); 

      if (fragment != null) { 
       fragmentManager.beginTransaction() 
           .add(getFragmentContainerId(), fragment) 
           .commit(); 
      } 
     } 
     mFragment = fragment; 
    } 

PersonListFragment.class

public class PersonListFragment 
     extends BaseListFragment 
{ 
    public static final int LOADER_PERSON_ID = 2; 

    public PersonListFragment() { 
     //nop 
    } 

    public static PersonListFragment newInstance() { 
     return new PersonListFragment(); 
    } 

    @NonNull 
    @Override 
    public Integer getListLoaderId() { 
     return LOADER_PERSON_ID_ID; 
    } 

单元测试代码块;

public class PersonListFragmentTest{ 

    @Mock 
    private PersonListFragment mPersonListFragment; 
    private PersonListActivity mPersonListActivity; 

    @Mock 
    private BaseFragmentActivity mBaseFragmentActivity; 


    @Before 
    public void setup() throws Exception { 
     mPersonListActivity = new PersonListActivity(); 
     mPersonListFragment = new PersonListFragment(); 

     mBaseFragmentActivity = new BaseFragmentActivity() { 
      @Override 
      protected Fragment createFragment() { 
       return PersonListFragment.newInstance(); 
      } 
     }; 

     mBaseFragmentActivity.initFragment(); //PersonListFragment is null 

    } 

    @Test 
    public void getListLoaderIdTest_True() { 
     assertEquals(1, 1); // for setup 

    } 

回答

0

我解决了我的问题。该片段不工作,因为我正在测试文件夹中工作。当我在androidTest文件夹中重新编写测试时,我得到了正确的结果,没有错误。

(com.hpolat.example.personapp。androidTest。...),