2013-08-19 3 views
2

Я хочу протестировать фрагмент с помощью приложений AndroidTest и Mockito (я использую mockito для других тестовых случаев).Тестирование фрагмента (Android), насмешка getActivity() call

Я сделал это раньше с помощью своего собственного кода (закодированного по-другому), но в этом случае я тестирую фрагмент, и я хочу издеваться над этим вызовом: final PackageManager packageManager = getActivity(). GetPackageManager() ;

Я поместил вас здесь в состав TestClass и часть фрагмента, который я хочу проверить. Заранее благодарим за ваши идеи или предложения.

public class MyFragmentTest extends 
    ActivityInstrumentationTestCase2<MyActivity>{ 

    MyFragment myFragment; 

    public MyFragmentTest() { 
     super(MyActivity.class); 
    } 

    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 

     // This have to be done because of some issues with dexmaker 
     System.setProperty("dexmaker.dexcache", "/sdcard"); 
     // This have to be done because of the sharedUserId problem 
     Thread.currentThread().setContextClassLoader(
      getClass().getClassLoader()); 

     myFragment = new MyFragment() { 
      //I can override methods here 
     }; 

    } 

    public void testMyMethod() throws Exception { 
     myFragment.methodThatIWantToTest(); 
    } 

} 


/************ CLASS THAT I WANT TO TEST *********/ 
public class MyFragment extends Fragment{ 

    public void methodThatIWantToTest(){ 
     /*..... more lines */ 
     final PackageManager packageManager = getActivity().getPackageManager(); 
     /*..... more lines ...*/ 
    } 

}

+1

Что такое getActivity() и где он находится? – Saurabh

ответ

0

Я использовал этот хак:

// Needed because Fragment.mActivity is package-private 
package android.support.v4.app; 

public class FragmentInjector { 
    public static void injectActivity(Fragment fragment, FragmentActivity fragmentActivity) { 
     fragment.mActivity = fragmentActivity; 
    } 
} 

В качестве альтернативы вы могли бы трудоустроить отражение изменить значение fragment.mActivity. Я не знаю другого пути.

+0

Для меня работает с отражением, изменяющим значение, потому что я не хочу применять хак в общем аспекте. Благодаря! –

+0

Как использовать этот фрагмент кода, можете ли вы дать некоторый полный контекст, где применять этот класс? спасибо – cV2