2013-08-19 5 views
2

AndroidTest 케이스 및 Mockito (다른 테스트 케이스의 경우 mockito 사용)로 조각을 테스트하고 싶습니다.조각 (안드로이드) 테스트, getActivity() 호출

필자는 다른 방법으로 코딩 된 코드를 사용했지만,이 경우에는 Fragment를 테스트하고 있는데이 호출을 모의하고 싶습니다. final PackageManager packageManager = getActivity(). getPackageManager() ;

여기에 TestClass의 일부와 테스트 할 조각의 일부를 넣겠습니다. 아이디어 나 제안에 미리 감사드립니다.

// 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의 값을 변경하려면 반사를 사용 수 :

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

나는이 해킹을 채택했다. 나는 다른 어떤 길도 모른다.

+0

나를 위해 일반적인 측면에서 해킹을 적용하고 싶지 않아 리플렉션을 사용하여 값을 변경합니다. 감사! –

+0

이 코드 조각을 사용하는 방법,이 클래스를 적용 할 수있는 완전한 컨텍스트를 제공 할 수 있습니까? 고마워 – cV2

관련 문제