読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

Fragmentをテストしてみる

Android

正しいやり方なのかは不明ですが、色々試した結果のメモ

テスト対象コードサンプル

Fragment内でButtonが押されたらEditTextをクリアする

MainFragment.java

public class MainFragment extends Fragment {

    private EditText mEditText;
    private Button mButton;

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

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

        mEditText = (EditText) getView().findViewById(R.id.edit);
        mButton = (Button) getView().findViewById(R.id.button);

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mEditText.setText("");
            }
        });
    }

}

テストコード

Buttonが押されたらEditTextがクリアされるかをテストしてみます。
Fragmentを直接テストする感じではなく、Activity経由でFragmentを取得し、それをテストする感じです。

MainFragmentTest.java

public class MainFragmentTest extends ActivityInstrumentationTestCase2<MainActivity> {

    private EditText mEditText;

    private Button mButton;

    public MainFragmentTest() {
        super(MainActivity.class);
    }

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

        // ActivityからFragmentを取得
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        Fragment fragment = fragmentManager.findFragmentById(R.id.fragment);

        // FragmentのViewを取得
        View v = fragment.getView();

        // Widget取得
        mEditText = (EditText) v.findViewById(R.id.edit);
        mButton = (Button) v.findViewById(R.id.button);
    }

    @UiThreadTest
    public void testClearEditText() throws Exception {

        // EditTextへ入力
        mEditText.setText("ABCDE");
        assertEquals("ABCDE", mEditText.getText().toString());

        // ボタンクリックでEditTextが空になることを確認
        mButton.performClick();
        assertEquals("", mEditText.getText().toString());

    }

}


こうしたほうが良いとかいう意見があればお願いします。
まだまだ未熟者なので…

Androidのテストはわからないことが多く、テストも書きにくいものばかりですが、
少しでも書けるところは書いていきたいと思います。
RoboGuiceとかも使ってみたいですね。