Robolectric 에서 SupoortFragment 사용하기

개발 이야기 2014. 7. 10. 21:12

UI 테스트에서 가장 큰 축은 2가지입니다.

1. Activity

2. Fragment


사실 이 2개만 제어할 수 있어도 UI 테스트의 대부분을 수행하는 거라 볼 수 있지요.

그러면 이번에는 Fragment 중에서도 support.v4.fragment 를 테스트해보도록 하겠습니다.


1. MyFragment.class

public class MyFragment extends Fragment {

    public static MyFragment newInstance() {
        MyFragment fragment = new MyFragment();
        return fragment;
    }
    public MyFragment() {
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_my, container, false);
    }
}

2. fragment_my.xml



    


3. MyFragmentTest.class

@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18)
@RunWith(RobolectricGradleTestRunner.class)
public class MyFragmentTest {

    private MyFragment fragment;

    @Before
    public void setUp() throws Exception {

        FragmentActivity fragmentActivity = Robolectric.buildActivity(FragmentActivity.class).create().start().resume().get();

        fragment = new MyFragment();
        FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();
        fragmentManager.beginTransaction().add(android.R.id.content, fragment).commit();
    }

    @Test
    public void testInit() throws Exception {

        TextView textView = (TextView) fragment.getView().findViewById(R.id.tv_frag);
        assertNotNull(textView);

        assertThat(textView.getText().toString(), equalTo(Robolectric.application.getString(R.string.hello_blank_fragment)));

    }
}

Robolectric 패키지 내부에 FragmentTestUtil.startFragment(support.v4.fragment) 가 존재 하지만 정상적으로 Fragment 를 바인딩 못해주는 버그가 있어서 저는 임의로 Fragment 바인딩을 설정하였습니다.

그리고 Fragment 가 Activity 와 직접적인 상호작용이 있다면 해당하는 액티비티를 사용해주시는게 좋겠죠?


덧.
아직 Support V7 에서 사용하는 ActionBarActivity 는 방법을 찾지 못했습니다. resource 를 못 찾는 문제가 있더군요. 방법을 찾으면 갱신하다록 하겠습니다.

설정

트랙백

댓글